hrbust1164, 1287_____hrbust上的簡單哈希
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
分析:
//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