1280:前m大的数

来源:互联网 发布:java round half up 编辑:程序博客网 时间:2024/05/11 12:28

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1280

方法:hash排序

思路:磁体明显是hash,数据也不大,基本可以满足要求,唯一要注意的是需要控制一下输出格式。;另外,如果有多个值相同的时候,需要输出多个值,因此hash表中储存的就应该是该值的数目,而不是只用作标记此数值出现过。

难点:输出格式控制。

#include<iostream>#include<cstdio>using namespace std;int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        int hashset[5003*2] = {0};        int num[3000] = {0};        for(int i = 0;i < n;i++)            scanf("%d",&num[i]);        int maxmum = 0;        for(int i = 0;i < n;i++)        {            for(int j = i+1;j < n;j++)            {                hashset[num[i]+num[j]]++;                if(num[i]+num[j] > maxmum)                    maxmum = num[i]+num[j];            }        }        int counter = 0;        while(counter != m)        {            if(hashset[maxmum] > 0)            {                printf("%d",maxmum);                hashset[maxmum]--;                if(++counter != m) //                    printf(" ");            }            else            {                maxmum--;            }        }        printf("\n");    }}


0 0
原创粉丝点击