频道栏目
首页 > 程序开发 > 软件开发 > C语言 > 正文
HDU 1280 前m大的数
2011-08-17 17:15:38      个评论      
收藏   我要投稿

给定的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, 0, sizeof(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

点击复制链接 与好友分享!回本站首页
相关TAG标签 HDU 1280 前m大的数
上一篇:HDU 1029 Ignatius and the Princess IV
下一篇:用C语言读取大文件的问题--内存映射
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站