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();
不然的话,刚开始没问题,后来才会出现问题,下图是测试的数据: