還記得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...