hdu1280

来源:互联网 发布:淘宝折扣价怎么设置 编辑:程序博客网 时间:2024/06/06 04:34

题目链接:前m大的数

题目大意:给出n个数,两两求和,求m大的和

题目分析:

1、直接sort,780ms

2、hash[a[i]+a[j]]++,i=maxsum,i--,从后往前输出n个

注意:输出格式问题

固定格式

for(int i=0;i<m;i++){            if(i!=0)printf(" ");            printf("%d",sum[i]);        }        printf("\n");

代码一,sort:

#include <stdio.h>#include<algorithm>using namespace std;const int maxn=3000*1500+5;int sum[maxn];int a[3005];bool cmp(int a,int b){    return a>b;}int main(){    //freopen("in.txt","r",stdin);    int n,m;    while(scanf("%d %d",&n,&m)!=EOF){        for(int i=0;i<n;i++)scanf("%d",&a[i]);        int tot=0;        for(int i=0;i<n;i++){            for(int j=i+1;j<n;j++){                sum[tot++]=a[i]+a[j];            }        }        sort(sum,sum+tot,cmp);        for(int i=0;i<m;i++){            if(i!=0)printf(" ");            printf("%d",sum[i]);        }        printf("\n");    }    return 0;}

代码2,hash

#include <stdio.h>#include <algorithm>#include <memory.h>using namespace std;int a[3005];int h[10005];bool cmp(int a,int b){    return a>b;}int main(){    //freopen("in.txt","r",stdin);    int n,m,Max;    while(scanf("%d %d",&n,&m)!=EOF){        Max=-1;        memset(h,0,sizeof(h));        for(int i=0;i<n;i++)scanf("%d",&a[i]);        int tot=0;        for(int i=0;i<n;i++){            for(int j=i+1;j<n;j++){                h[a[i]+a[j]]++;                Max=max(Max,a[i]+a[j]);            }        }        int k=m,i=Max;        while(k){            if(h[i]--){                if(k!=m)printf(" ");                printf("%d",i);                k--;            }            else i--;        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击