WA:
#include<iostream>
#include<queue>
#include<iomanip>
using namespace std;
class Node {
public:
double ratio, mount,value;
Node(double r,double m,double v){
ratio=r;
mount=m;
value=v;
}
bool operator>(const Node n1)const{
return ratio < n1.ratio;///值越大,优先级越大
}
};
int main(int argc, char* argv[])
{
priority_queue<Node, vector<Node>, greater<Node> > pq;
int m, n;
double result, j, f;
while(cin >> m >> n)
{
result = 0.0;
if(m == -1 || n == -1)
return 1;//-1 -1 return
for(int i = 0; i < n; i++)
{
cin >> j >> f;
pq.push(Node(j/f, j, f));//sort
}
while(m>0 && !pq.empty())
{
if(m >= pq.top().value)
{
result += pq.top().mount;
m -= (int)pq.top().value;
}else
{
result += m * pq.top().ratio;
m = 0;
}
pq.pop();
}
cout << fixed << setprecision(3) << result << endl;
}
return 0;
}
AC:
在while循环的开始时加上一条:
while(!pq.empty())
pq.pop();
不然的话,刚开始没问题,后来才会出现问题,下图是测试的数据: