前m大的数

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 29636 Accepted Submission(s): 9814

Problem Description
还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。
给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。

Input
输入可能包含多组数据,其中每组数据包括两行:
第一行两个数N和M,
第二行N个数,表示该序列。

Output
对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。

Sample Input
4 4
1 2 3 4
4 5
5 3 6 4

Sample Output
7 6 5 5
11 10 9 9 8

Author
Gardon

Source
杭电ACM集训队训练赛(VI)

问题链接:HDU1280 前m大的数
问题简述:(略)
问题分析
    2个数和值范围比较小,就可以使用计数排序。
    有两种排序解决方法,一是计数排序(一般被称作桶排序),其时间复杂度为O(n),代码逻辑略微复杂;二是使用排序,输出最大的n个数即可。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序(计数排序)如下:

/* HDU1280 前m大的数 */#include <bits/stdc++.h>using namespace std;const int N = 3000;
int a[N];
const int M = 5000;
int cnt[M + M + 1];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {for(int i = 0; i < n; i++) scanf("%d", &a[i]);memset(cnt, 0, sizeof(cnt));for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)cnt[a[i] + a[j]]++;int i;for(i = M + M; i >= 0 && m >= 1; i--) {while(cnt[i]) {if(m-- == 1) {printf("%d\n", i);break;} else {printf("%d ", i);cnt[i]--;}}}}return 0;
}

AC的C++语言程序(排序)如下:

/* HDU1280 前m大的数 */#include <bits/stdc++.h>using namespace std;const int N = 3000;
int a[N];
const int M = 5000;
int sum[M * M / 2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {for(int i = 0; i < n; i++) scanf("%d", &a[i]);int cnt = 0;for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)sum[cnt++] = a[i] + a[j];sort(sum, sum + cnt);for(int i = cnt - 1; i > cnt - m; i--)printf("%d ", sum[i]);printf("%d\n", sum[cnt - m]);}return 0;
}

HDU1280 前m大的数【排序】相关推荐

  1. hdu1280 前m大的数(数组下标排序)

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. 如何在10亿数中找出前1000大的数

    1.排序方法 首先能想到的就是先排序,然后取前1000个数,或者部分排序,只排出前1000个数就行 缺点:这些方法的时间复杂度都比较高 2,分治法 可以使用分治法,这有点类似快排中partition的 ...

  3. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  4. 信息学奥赛一本通(1235:输出前k大的数)——堆排序

    1235:输出前k大的数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12715     通过数: 4043 [题目描述] 给定一个数组,统计前k大的数并且把这 ...

  5. [Hash应用问题] 例3.2 给出n个整数,按从大到小的顺序输出前m大的数

    题目描述: 给出n个整数,请按从大到小的顺序输出前m大的数. 输入: 每组测试数据又两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500 ...

  6. 如何在10亿个数中找到前1000大的数?

    2019独角兽企业重金招聘Python工程师标准>>> 如何在10亿个数中找到前1000大的数? 定位 TopN问题 算法 排序不是最优的解决方案: 可以考虑分治法: 类似快速排序中 ...

  7. (分治)7617:输出前k大的数

    描述  给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入  第一行包含一个整数n,表示数组的大小.n < 100000.  第二行包含n个整数,表示数组的元素,整数之间以一个空格分 ...

  8. n个数中输出前m大的数

    描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...

  9. 20-输出前m大的数

    例题:输出前m大的数 题目描述 给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示 ...

最新文章

  1. c2064 项不会计算为接受0个参数的函数_无网格法理论与Matlab程序设计(6)——传统径向基点插值(RPIM)形函数...
  2. 缅甸、老挝出入证可在西双版纳办
  3. Centos7安装Python3.7
  4. JAVA知识基础(一):数据类型
  5. matlab设计凸轮轮廓代码_机械设计基础之什么是凸轮机构,分类和常用运动规律是怎么样的?...
  6. 【译】Silverlight for Windows Phone Toolkit In Depth(五)
  7. 乐优商城(02)--商品分类
  8. 个人博客系统测试用例
  9. Django models Fild详解
  10. 不喜欢学计算机专业怎么办,录取到不喜欢的专业怎么办?说说我有所不同的“转系生活”...
  11. DRL-FlappyBird
  12. win10计算机丢失msvcr,计算机中丢失msvcr110.dll怎么办?Win10系统中丢失msvcr110.dll解决方法...
  13. 之前从未接触过编程,想学Python怎么开始?(史上最全学习路线图)
  14. Python .format()函数使用方法
  15. 自定义封包协议c语言,Socket分包,封包,粘包
  16. 学python多大年龄可以学车_考驾照的最小年龄,多少岁可以考驾照
  17. ArrayList类线程不安全的解决方法
  18. 毕业四年多,如梦初醒
  19. Uncaught Error: Undefined constant “Ford“
  20. 合并报表编制采用的理论_合并报表编制理论知识(必读)详解

热门文章

  1. mysql union 别名报错_MySQL中UNION和UNION ALL的使用
  2. java酒店管理系统_酒店管理系统
  3. Go操作MySql Memache Mongodb
  4. Cocos2d-x学习之创建Android工程和编译
  5. 关于用C#编写ActiveX控件4(转)
  6. 轻量级锁_一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁 不看后悔系列...
  7. java io nio pio_Netty之BIO(同步阻塞IO)、PIO(偽異步阻塞IO)、NIO(異步非阻塞IO)、AIO(異步非阻塞IO)、Netty...
  8. structured Streaming
  9. jmeter性能测试用户参数参数化
  10. 计算机病毒不会直接危害计算机用户的健康,北京语言大学入学测试机考(高起点)计算机基础模拟题...