前m大的數

韓小妹發表於2018-08-11

Problem Description

還記得Gardon給小希佈置的那個作業麼?(上次比賽的1005)其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的M個數告訴她就可以了。
給定一個包含N(N<=3000)個正整數的序列,每個數不超過5000,對它們兩兩相加得到的N*(N-1)/2個和,求出其中前M大的數(M<=1000)並按從大到小的順序排列。

Input

輸入可能包含多組資料,其中每組資料包括兩行:
第一行兩個數N和M,
第二行N個數,表示該序列。

Output

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

Sample Input

4  4

1  2  3  4

4  5

5  3  6  4

Sample Output

7  6  5  5

11  10  9  9  8

AC碼:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=3000;
const int MAX=5000000;
int a[MAXN];
int b[MAX];
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	int n,m;
	while(~scanf("%d %d",&n,&m))
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		int i,j,k=0;
		for(i=0;i<n;i++)
		scanf("%d",&a[i]);
		for(i=0;i<n;i++)
		{
			for(j=i+1;j<n;j++)
			{
				b[k++]=a[i]+a[j];
			}
		}
		sort(b,b+k,cmp);
		for(i=0;i<m-1;i++)
		printf("%d ",b[i]);
		printf("%d\n",b[m-1]);
	}
	return 0;
}

 

相關文章