hrbust1164, 1287_____hrbust上的简单哈希
hrbust1164
Description
用计算机随机生成了N个0到910305(包含0和910305)之间的随机整数(N≤100000000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序。
请你完成“去重”与“排序”的工作。
Input
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
Output
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
Sample
Sample Input
10
20 40 32 67 40 20 89 300 400 15
Sample Output
8
15 20 32 40 67 89 300 400
分析:
AC代码:
//author: svtter
//
#include
#include
#include
#include
#include
hrbust1287
Description
用计算机随机生成了N个0到1000000000(包含0和1000000000)之间的随机整数(N≤5000000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序。 请你完成“去重”与“排序”的工作
Input
输入有2行,第1行为1个正整数,表示所生成的随机数的个数: N 第2行有N个用空格隔开的正整数,为所产生的随机数。
Output
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
Sample
Sample Input
10
20 40 32 67 40 20 89 300 400 15
Sample Output
8
15 20 32 40 67 89 300 400
算法分析:
这道题目一开始想都没想就用了直接定址,爽爽的WA了。 随后开始写拉链法的同时又想到一个新的算法,基本上等于暴力解了:
就是开两个数组,一个排好序,重复的就不放在里面了。
AC代码:
//author: svtter
//
#include
#include
#include
#include
#include
爽爽的AC了:
但是很明显时间空间都过于大了。之前见过一个通过next数组来实现拉链法,遂同样如此写。。但是各种蛋疼,需要不停的检查删除,空间方面消耗达到惊人的59000K= =差一点就超,直接放弃了。
后来发现爽的解法,使用指针来写但不是动态开辟新空间的写法(奈何见识浅薄,今日才见):
//author: svtter
//
#include
#include
#include
#include
#include