hdoj-1425-sort【哈希】

来源:互联网 发布:ecko unltd淘宝旗舰店 编辑:程序博客网 时间:2024/05/22 10:22

sort

Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34501 Accepted Submission(s): 10232


Problem Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。

Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。

Output
对每组测试数据按从大到小的顺序输出前m大的数。

Sample Input
5 33 -35 92 213 -644

Sample Output
213 92 3
Hint
Hint
请用VC/VC++提交

Author
LL

Source
ACM暑期集训队练习赛(三)

Recommend
linle | We have carefully selected several similar problems for you:1280 1800 1264 2522 1205

贴个没用哈希的代码:只能用G++过,C++超时
#include<stdio.h>#include<algorithm>using namespace std;int a[1000000];int cmp(int a,int b){    return a>b;}int main(){    int n,m;    while(~scanf("%d%d",&n,&m)){        int i;        for(i=0;i<n;++i){            scanf("%d",&a[i]);                }        sort(a,a+n,cmp);        printf("%d",a[0]);        for(i=1;i<m;++i)        printf(" %d",a[i]);        printf("\n");    }    return 0;}

下面是用哈希法写的,c++能过
#include<stdio.h>#include<string.h>bool hash[1000001];const int MAXN=500000;int main(){int n,m;while(~scanf("%d%d",&n,&m)){memset(hash,0,sizeof(hash));int i,x;for(i=0;i<n;++i){scanf("%d",&x);hash[x+MAXN]=true;}for(i=MAXN*2;i>=0;--i){if(hash[i]&&m>1){printf("%d ",i-MAXN);m--;}else if(hash[i]&&m==1){printf("%d\n",i-MAXN);break;}}}return 0;}

0 0
原创粉丝点击