题目地址: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
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