4 4 1 2 3 4 4 5 5 3 6 4
7 6 5 5 11 10 9 9 8
对这道题彻彻底底无语,比赛完后才发现那么简单,把数组开到4500000就行了,还是自己太好高骛远,真不知道自己当时怎么能做成这个样子。。。。。。
贴上代码:
#include<bits/stdc++.h> using namespace std; const int N=4500000+10; int a[3000],b[N]; int cmp(int a,int b) { return a>b; } int main() { int n,m,i,j,k; while(~scanf("%d%d",&n,&m)) { k=0; for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n);//这一步是完全没必要的,反正都是遍历; for(i=n-1;i>=1;i--) for(j=i-1;j>=0;j--) b[k++]=a[i]+a[j];<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">当时看到m最大才1000,所以想排序后从后面加起,</span>
sort(b,b+k,cmp); for(i=0;i<m;i++) { printf("%d",b[i]); if(i!=m-1) printf(" "); } printf("\n"); } return 0; }