HDU 1280 前m大的数

HDU 1280 前m大的数
给定的N个整数序列, 两两求和,从大到小输出M个和数。
因为所有整数不超过5000,则相加不会超过10000,可以
用哈希解决。
 1 // 简单哈希
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 const int maxn = 3005;
 9 int arr[maxn], sum[10001] ,n, m, x, y;
10 //因为所有的整数都不超过5000, 所以最大的和也不超过10000, sum数组开10001即可!
11 
12 int main()
13 {
14     while (scanf("%d %d"&n, &m) != EOF)
15     {
16         arr[n];
17         for (int i=0; i<n; i++)
18         {
19             scanf("%d"&arr[i]);
20         }
21         memset(sum, 0sizeof(sum));
22         for (int i=0; i<n-1; i++)
23         {
24             for (int j=i+1; j<n; j++)
25             {
26                 sum[arr[i] + arr[j]] ++;
27             }
28         }
29         int count = 0;
30         for (int j=10000; j>=0; j--)
31         {
32             if (sum[j])
33             {
34                 for (int i=0; i<sum[j]; i++)
35                 {
36                     count++;
37                     count == 1 ? printf("%d", j) : printf("%d", j);
38                     if (count == m)break;
39                     printf(" ");
40                 }
41             }
42             if (count == m) break;
43         }
44         printf("\n");
45     }
46 }
47 

posted on 2011-08-16 16:40 AK 阅读(1718) 评论(0)  编辑 收藏 引用 所属分类: ACM


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

资源连接

搜索

最新评论

阅读排行榜

评论排行榜