题意:
给一串数字,他们两两相加后,输出前m大的数
思路:
本来以为范围这么大会超时,但是数据比较水……
注意一下数组范围即可,3000*(3000-1)/2 = 450w, 所以至少要开450w的数组
代码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int INF = 0x3fffffff;
const int MAXN = 3000+10;
const int MAXM = 5000000+10;
int ans = 0;
int arr[MAXN];
int vis[MAXM];
bool cmp(int x, int y){
return x>y;
}
int main(){
int n, m;
int len, tmp;
while(~scanf("%d%d", &n, &m)){
len = 0;
tmp = min(n,m);
for(int i=0; i<n; i++) scanf("%d", &arr[i]);
sort(arr, arr+n, cmp);
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++){
vis[len++] = arr[i]+arr[j];
}
sort(vis, vis+len, cmp);
for(int i=0; i<m-1; i++)
printf("%d ", vis[i]);
printf("%d\n", vis[m-1]);
}
return 0;
}
反思:
注意题目条件,注意数组范围