给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。
#include <iostream>
using namespace std;
int main(void)
{
int N, M;
while(cin >> N >> M)
{
int *temp = new int[N];
for(int i=0; i<N; ++i)
{
cin >> temp[i];
}
int data[10005];
for(int i=0; i<10005; ++i)
{
data[i] = 0;
}
for(int i=0; i<N-1; ++i)
{
for(int j=i+1; j<N; ++j)
{
data[temp[i]+temp[j]]++;
}
}
for(int i=10004; M > 0 && i>=0; --i)
{
while(data[i] != 0)
{
if(M != 1)
{
cout << i << ' ';
M--;
}
else
{
cout << i << endl;
M--;
break;
}
data[i]--;
}
}
delete []temp;
temp = NULL;
}
return 0;
}