前m大的數

2021-10-06 05:12:35 字數 1271 閱讀 1004

還記得gardon給小希布置的那個作業麼?(上次比賽的1005)其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。

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

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

第一行兩個數n和m,

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

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

4 41 2 3 4

4 55 3 6 4

7 6 5 5

11 10 9 9 8

將n(n<=3000)個數進行累加排序,用一般的排序方法時間複雜度為0(nn)如果數多的話,就會超時,

所以用快速排序法 #include > 中sort函式時間複雜度為0(nlogn),空間複雜度就是相加後得到的陣列了,最多的情況為3000*(3000-1)/2個數所以建立乙個4500000的陣列來容納;輸入題目資料後,

進行相加入陣列,然後sort排序,輸出前m個數就ok了;

使用:#include < algorithm >

using namespace std;

作用:排序

時間複雜度:n*lg(n)

基本用法:函式形式sort(首位址,尾位址的下乙個位址,排序方式)

排序方式可以省略,省略的話預設公升序排序從小到大

比如乙個a[10] sort(a,a+10)將a陣列全部從小到大排序

詳細操作進上方鏈結裡面有sort函式的詳解。

#include

#include

using namespace std;

intpx

(int x,

int y)

//定義降序排序從大到小,為下面sort函式做準備

intmain()

for(i=

0;i)//將每項兩兩相加

}sort

(b,b+s,px)

;//sort函式排序

for(i=

0;i1;i++

)//m-1個數,應該有格式要求,最後乙個數單獨輸出列在for後就行

printf

("%d\n"

,b[i]);

//格式限制最後乙個輸出無空格

}return0;

}

前m大的數

total submission s 13762 accepted submission s 4693 problem description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表...

前m大的數

a 前m大的數 sort time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,...

前m大的數

hpu2017 sort 結構體練習 virtual judge 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。給定乙個包含n n 3000...