hdu 1280 前m大的数 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1280
题目分析:求出来存进优先队列(升序),存的时候只要size大于m就pop,最后用一下栈反着输出来就行了。
code:
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;
struct cmp
{
bool operator()(int&a,int&b)
{
return a>b;
}
};
int main()
{
int m,n,x,i,j,a[3010];
priority_queue<int,vector<int>,cmp>q;
stack<int>s;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
q.push(a[i]+a[j]);
if(q.size()>m)q.pop();
}
}
while(!q.empty())
{
s.push(q.top());
q.pop();
}
while(!s.empty())
{
printf("%d",s.top());
s.pop();
printf("%s",s.empty()?"\n":" ");
}
}
return 0;
}
PS:这题100%暴力也能过,我就是想练练STL……