您的位置:首页 > 其它

hdoj 3785 寻找大富翁

2015-08-18 15:39 411 查看

寻找大富翁

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 48 Accepted Submission(s) : 20
Problem Description
浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.


Input
输入包含多组测试用例. 每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: div="" n和m同时为0时表示输入结束.<="" 接下来一行输入镇上n个人的财富值.="" n为镇上的人数,m为需要找出的大富翁数,="">


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


/*
优先队列,保持m的数量即可! 
*/
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int b[100001];
int main()
{
	int n,m;
	while(scanf("%d%d",&n,&m),n,m)
	{
		int a,i;
		priority_queue<int,vector<int>,greater<int> >q;//优先队列 ,从小到大 
		while(n--)
		{
		scanf("%d",&a);
		q.push(a);
		if(q.size()>m)//长度达到m时,弹出队首! 
		{
			q.pop();
		} 
	   }
	   for(i=1;i<=m;i++)
		  {
		  	b[i]=q.top();
		  	q.pop() ;
		  }
		  for(i=m;i>=2;i--)
		  {
		  	printf("%d ",b[i]);
		  }
		  printf("%d\n",b[1]);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: