题干:

浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.

Input输入包含多组测试用例. 
每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值. 
n和m同时为0时表示输入结束.Output请输出乌镇前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行.Sample Input

3 1
2 5 -1
5 3
1 2 3 4 5
0 0

Sample Output

5
5 4 3

解题报告:水题,排序即可,优先队列亦可解。

排序ac:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;int a[100000+5];
int main()
{int n,m;while(~scanf("%d%d",&n,&m)) {if(n==0&&m==0) break;memset(a,0,sizeof(a));for(int i = 1; i<=n; i++) {scanf("%d",&a[i]);}sort(a+1,a+n+1, greater<int>() );if(n<=m) {for(int i = 1; i<=n; i++) {printf("%d%c",a[i],i==n?'\n':' '); }continue;}if(n>m) {for(int i = 1; i<= m; i++) {printf("%d%c",a[i],i==m?'\n':' '); }}}return 0 ;
}

事实证明不加if(n<=m)的情况 也能ac,看来是样例中没出这样的样例?不然依照题干应该是有这一种情况发生啊。

优先队列ac:

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,less<int> >q;//等价于priority_queue<int> q;  从大到小排序
int main()
{int n,t,a;while(scanf("%d %d",&n,&t)&&(n!=0||t!=0)){for(int i=0;i<n;i++){scanf("%d",&a);q.push(a);}for(int i=0;i<t-1;i++){printf("%d ",q.top());q.pop();}printf("%d",q.top());//最有一个数字没有空格。printf("\n");//每次别忘清空队列while(!q.empty())  q.pop();}return 0;
}
 int n,t,a;while(scanf("%d %d",&n,&t)&&(n!=0||t!=0)){for(int i=0;i<n;i++){scanf("%d",&a);q.push(a);}for(int i=0;i<t-1;i++){printf("%d ",q.top());q.pop();}printf("%d",q.top());//最有一个数字没有空格。printf("\n");//每次别忘清空队列while(!q.empty())  q.pop();}return 0;
}

优先队列ac2:(优化了n<=m的情况)源自网络

/*
当输入小于m个的时候,一直输入,当输入大于m个数之后 ,这m个数会按照从小到大的顺序排序,
再往里面输入的时候要进行判断,如果那个数比对顶元素大的话,这个数进队,对顶元素出对,
进队后就又变成从小到大排序了,输入完毕之后,将数据按从大到小输出,因为对顶元素是最小值,
所以,应该将元素 都重新赋值到数组中,然后从后往前输出!(就这个转换方法必须想到!!!)
*/
#include <stdio.h>
#include <queue>
#include <algorithm>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int a,b[100005];
int main() {int n,m,i,j,k;while(scanf("%d%d",&n,&m)&&(n||m)) { //n,m分别代表村中的总人数,和最富有的前m个人for(i=0; i<n; i++) { //将财产值放到队列中scanf("%d",&a);if(q.size()<m)q.push(a);else if(a>q.top()) {q.push(a);q.pop();}}if(n>m) { //当总人数比富翁人数多的话执行下面语句for(i=0; i<m; i++) {b[i]=q.top();q.pop();}for(i=m-1; i>0; i--)printf("%d ",b[i]);printf("%d\n",b[0]);} else { //总人数没有富翁人数多的话,执行这个下面的语句!for(i=0; i<n; i++) {b[i]=q.top();q.pop();}for(i=n-1; i>0; i--)printf("%d ",b[i]);printf("%d\n",b[0]);}}return 0;
}

今天又用set实现了一下,,第一发错了,后来发现需要multiset

AC代码:

#include<bits/stdc++.h>using namespace std;
multiset<int,greater<int> > ss;
int main()
{int n,m;while(~scanf("%d%d",&n,&m) ) {if(n+m == 0) break; ss.clear();int tmp;for(int i =1; i<=n; i++) {scanf("%d",&tmp);ss.insert(tmp);}int cnt = 0;set<int, greater<int> > :: iterator it; for(it = ss.begin(); it!=ss.end(); it++) {cnt++;printf("%d%c",*it,cnt==m?'\n':' ');if(cnt == m) break;}}return 0 ;
}

HDU 3785 寻找大富翁(sort排序或优先队列)相关推荐

  1. HDU 3785 寻找大富翁

    寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. HDU - 3785 寻找大富翁

    Description 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. Input 输入包含多组测试用例. 每个用例首先包含2个整数n(0<n<=100000)和m(0<m&l ...

  3. HDU3785 寻找大富翁【优先队列】

    寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDOJ-3785 寻找大富翁(优先队列)

    寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. 数据结构实验之排序四:寻找大富翁__咳咳咳,还魂篇!!

    数据结构实验之排序四:寻找大富翁 Time Limit: 200MS  Memory Limit: 512KB Submit  Statistic Problem Description 2015胡润 ...

  6. 数据结构实验之排序四:寻找大富翁 SDUT

    数据结构实验之排序四:寻找大富翁 SDUT Time Limit: 200 ms Memory Limit: 512 KiB Submit Statistic Problem Description ...

  7. c语言寻找大富翁,PTA 7-38 寻找大富翁(25 分)解法(C/C++)暴力快排/精准堆排 解法...

    7-38 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  8. 7-38 寻找大富翁 (25分)

    胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先给出两个正整数N(≤10​^6​ ...

  9. R7-7 寻找大富翁 (25 分)

    R7-7 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入 ...

最新文章

  1. Tensorflow学习资源
  2. cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
  3. Unity--------------------万向锁的概念
  4. (二)微服务分布式云架构 - spring cloud整合企业架构的技术点
  5. matlab 高斯函数_光学与matlab:高斯光的模拟
  6. Raft协议安全性保证
  7. Oracle入门(十四B)之PL/SQL异常处理
  8. 几件欣慰的事,关于.Net的培训和嵌入式开发效率
  9. 【SAS】REG过程详解
  10. 【转载】如何知道自己适合做什么
  11. MySQL常用命令用法总结
  12. lmdb数据库的读取与转换(二) —— 数据集操作
  13. tenforflow版YOLOv3下VOC数据集的准备和训练
  14. Autumn2.0.1_WP扁平化博客自媒体文章资讯类网站模板
  15. 推荐一款linux下流程图绘制工具-yEd Graph Editor
  16. 概率论复习笔记3.0--假设检验
  17. 7-2 高精度求累加和 分数 25作者 胡伟平单位 广西科技大学
  18. 某人写的openCV学习笔记
  19. 通信原理包络是什么意思_科学奇问:光纤通信为什么那么快?光靠什么传递信息的?原理是啥...
  20. vue开发移动端,mui框架的各种使用方法

热门文章

  1. Java学习笔记13-1——SpringMVC
  2. 获取计算机内存镜像文件,计算机取证中的内存镜像获取的研究与实现
  3. threejs- z-fighting 问题
  4. vue如何split_vue代码分割的实现(codesplit)
  5. python分布式框架_高性能分布式执行框架——Ray
  6. python怎么放音乐_python怎么播放音乐
  7. oracle挂载到空闲进程,Oracle部分后台进程
  8. TI Sitara AM335x系统之AM335x uboot spl分析
  9. win7上安装wince6.0
  10. 电脑入门完全自学手册_室内设计CAD施工图识读手册