HDOJ 1280 前m大的数

来源:互联网 发布:php表单提交安全 编辑:程序博客网 时间:2024/05/21 17:08

超级传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=1280

由于N<=3000,它们和的组合N*(N-1)/2是一个比较大的数,直接暴力求解必然TLE。不过题目中说了:每个数不超过5000,而且都是正整数,所以可以用hash来尝试一下。

#include<stdio.h>int main () {    int n,m,i,j,first,a[3003],hash[10010]={0};    while (scanf("%d%d",&n,&m) != EOF) {        for (i=0;i<n;i++) scanf("%d",&a[i]);        for (i=0;i<n;i++) {            for (j=i+1;j<n;j++) {                hash[a[i]+a[j]] ++;            }        }        first = 1;        for (i=10000;i>=0;i--) {            if (hash[i]) {                if (m>=hash[i]) {                    for (j=1;j<=hash[i];j++) {                        if (first) {                            first = 0;                        } else printf(" ");                        printf("%d",i);                    }                    m -= hash[i];                } else {                    for (j=1;j<=m;j++) {                        if (first) {                            first = 0;                        } else printf(" ");                        printf("%d",i);                    }                    m = 0;                    printf("\n");                    break;                }            }        }    }    return 0;}

时间是0MS,hash还是很给力的。

原创粉丝点击