码迷,mamicode.com
首页 > 其他好文 > 详细

hdoj-1425-sort【哈希】

时间:2015-08-06 22:27:02      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

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 3 3 -35 92 213 -644

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

Author
LL

Source

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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

hdoj-1425-sort【哈希】

标签:

原文地址:http://blog.csdn.net/qq_18062811/article/details/47322839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!