题目地址:http://acm.hdu.edu.cn/status.php?user=lee41sum&pid=1425&status=5

简单哈希,空间换时间,在这里用一个max记录输入数据中最大的一个数,有效的缩小搜索的范围。

代码:

 1 #include <iostream>
 2 #include <memory>
 3 using namespace std;
 4 
 5 int a[1000001];
 6 int main()
 7 {
 8     int n,m,max=-1;
 9     int temp;
10     while(scanf("%d%d",&n,&m)!=EOF)
11     {
12         int cnt=0;
13         memset(a,0,sizeof(a[0])*1000001);
14         for (int i=0;i<n;i++)
15         {
16             scanf("%d",&temp);
17             if (temp>=max)
18             {
19                 max = temp;
20             }
21             a[temp+500000= 1;
22         }
23         int j = max+500000;
24         while (j>=0)
25         {
26             if (a[j]==1)
27             {
28                 printf("%d",j-500000);
29                 cnt++;
30                 if(cnt==m)
31                 {
32                     printf("\n");
33                     break;
34                 }
35                 else
36                 {
37                     printf(" ");
38                 }
39             }
40             j--;
41         }
42     }
43     return 0;
44 }
45