题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425
题目意思:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整
数。对每组测试数据按从大到小的顺序输出前m大的数。
我的思路:利用Hash函数改变数组下标,使其下标在数组范围内,然后可以按照从大到小的顺序输出,此题最好用scanf,printf输入输出,用cin,
cout很可能会时间超限。
代码如下:
<pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,a;
char s[1000001]={'0'};//初始化为0
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a);
s[a+500000]='1';//Hash函数
}
for(i=1000000;i>0 && m>0;i--)
{
if(s[i]=='1')
{
printf("%d",i-500000);
if(m>0)
{
if(m>1) printf(" ");
m--;
}
}
}
printf("\n");
}
return 0;