您的位置:首页 > 其它

HDU-#1425 sort(Hash散列)

2014-07-11 20:22 274 查看
题目大意:给一个大数据范围的序列,按降序排列,输出前m个数据序列。

解题思路:由于数据量较大,直接sort(),会超时。因此,可以利用Hash函数的性质进行处理,这里可以直接利用输入值加上最大范围值N作为下标,那么根据下标值i的大小就可以判断数据在序列中的大小了,然后逆序输出前m个就可以了,输出值减去最大范围值就是目标值。其中哈希函数为i-N。注意使用C的输入输出流,如果使用C++的会超时。

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1425

code:

<pre name="code" class="cpp">#include <iostream>
#include <cstdio>
using namespace std;

const int N = 500001;
int hash[2*N]={0};

int main(){
int n,m,max,num;
while(scanf("%d%d",&n,&m)!=EOF){
max=0;
for(int i=0;i<n;i++){
scanf("%d",&num);
if(num>max) max=num;
hash[num+N]=1;
}
for(int i=max+N;i>=0&&m>0;i--){
if(hash[i]){
if(m==1)  printf("%d\n",i-N);
else printf("%d ",i-N);
m--;hash[i]=0;
}
}
}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: