7-1 寻找大富翁 PTA 堆排序
2024-08-26 13:08:13
7-1 寻找大富翁 (25 分)
胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。
输入格式:
输入首先给出两个正整数N(≤106)和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。
输出格式:
在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。
输入样例:
8 3
8 12 7 3 20 9 5 18
输出样例:
20 18 12
简单的排序问题,快排超时了,换了堆排序就过了
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstdio>
#include <malloc.h> #define INF 0x3f3f3f3f
#define FRER() freopen("in.txt", "r", stdin)
#define FREW() freopen("out.txt", "w", stdout) using namespace std; const int maxn = 1e6 + ; int num[maxn]; void adjust(int s, int m) {
int temp = num[s];
for(int j = s * ; j <= m; j *= ) {
if(j < m && num[j] > num[j + ]) ++j;
if(temp <= num[j]) break;
num[s] = num[j];
s = j;
}
num[s] = temp;
} void heapSort(int n) {
for(int i = n / ; i > ; --i)
adjust(i, n);
for(int i = n; i > ; --i) {
swap(num[], num[i]);
adjust(, i - );
}
} int main()
{
int n, m;
scanf("%d %d", &n, &m);
for(int i = ; i <= n; ++i)
scanf("%d", &num[i]);
heapSort(n);
for(int i = ; i <= m && i <= n; ++i) {
printf("%d%c", num[i], (i == m || i == n) ? '\n' : ' ');
}
return ;
}
最新文章
- Chrome 控制台console的用法(转)
- java的基本数据类型有八种:
- handlebars.js 用 <;br>;替换掉 内容的换行符
- JSON字符串解析
- IOS第七天(3:UiTableView 模型和数据的分组的显示)
- 集合与Iterator
- C# 调用 C++ dll (类型对照)
- C# 将\u1234类型的字符转化成汉字
- 不同浏览器JS获取浏览器高度和宽度
- nodejs调试
- cocos2d-x结合cocosbuilder,不同屏幕适配小结
- jquery html5 file 上传图片显示图片
- 浅谈JavaScript的apply和call语句
- apache在window server 2003下的安全配置
- 第一个servlet程序
- 多线程中的event,用于多线程的协调
- unity2d开发windows phone游戏按钮问题
- Bjarne Stroustrup announces C++ Core Guidelines
- 解决SHAREJPOINT 跨域问题
- Javascript你不知道的那些事!(数字计算篇-变态篇)无意中聊天发现的一些奇怪的事情
热门文章
- Python数据报协议以及sockersever模块的使用
- Python人工智能之初识接口
- 关于android项目的习惯
- 线程队列queue
- 算法练习-Palindrome Number
- SuiteCRM-7.7.6 (Ubuntu 16.04)
- 5步玩转Power BI Embedded,老司机全程带路解析
- HUE安装与使用
- [转载]在VB.Net中获取COM对象的特定实例(Getting a specific instance of COM object in VB.Net)
- 快速提取邮箱地址(利用word或网站)