HDUOJ 1280 前m大的數 hash

2021-09-26 11:13:19 字數 726 閱讀 1191

problem description

給定乙個包含n(n<=3000)個正整數的序列,每個數不超過5000,對它們兩兩相加得到的n*(n-1)/2個和,求出其中前m大的數(m<=1000)並按從大到小的順序排列。

input

輸入可能包含多組資料,其中每組資料報括兩行:

第一行兩個數n和m,

第二行n個數,表示該序列。

output

對於輸入的每組資料,輸出m個數,表示結果。輸出應當按照從大到小的順序排列。

sample input

4 41 2 3 4

4 55 3 6 4

sample output

7 6 5 5

11 10 9 9 8

solution:這個題還是hash呀,用暴力排序鐵定超時,用hash陣列儲存每個和的個數,倒著輸出一遍就ok了,用乙個hash比暴力排序都簡單,掌握方法。

#include using namespace std;

int arr[3001], cnt[10001];

bool flag = false;//輸出空格判定

int main()

flag = false;

for (int i = 10000; i > 0 && m > 0; --i)

}putchar('\n');

} return 0;

}

hdoj 1280 前m大的數!

思路 這題和矩陣轉置有一點聯絡,它們兩兩相加得到的 n n 1 2 個和,其實就是矩陣的上三角或下三角,這一點解決了,再來個qsort就搞定啦!還有注意陣列的大小!我在這栽跟頭了 inta 3005 c 5000000 注意陣列的大小!intmain qsort c,k,sizeof int com...

hdu 1280 前m大的數

背景 週末練習賽c題 學習 1.把乙個陣列裡的元素兩兩相加,類似於范德蒙行列式,用兩個迴圈可完成。2.輸出最後乙個數後面沒有空格要單獨輸出。3.把陣列開在全域性,可以避免爆棧,因為全域性變數不管是不是靜態的都儲存在記憶體靜態資料區。include include using namespace st...

hdoj 1280 前M大的數

最開始的思路是 最大的和肯定由原始序列種最大的前k個數兩兩組合產生,由於m 1000,所以輸入序列中的前50個數就夠用了 50 49 2 1225 1000 然後用兩次stl裡的排序就能求出最大的m個數了,不知道為啥一直wa。只好寫了個counting sort ac了。方法一 計數排序 prog ...