本文主要是介绍1792. 最大平均通过率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题意
- 思路
- 代码
题意
题目链接
给了每个班的人数和通过人数,给了一堆必考过的学生,分配给了不同班,让平均班的通过率最高。
思路
看分配给不同班的收益率,优先最高收益率,使用优先队列
代码
class Solution {
public:double calcAdd(int pass, int total){return (pass + 1.0) / (total + 1.0) - (pass * 1.0) / total;}double maxAverageRatio(vector<vector<int>>& classes, int extraStudents) {priority_queue<pair<double, pair<int, int>>> Q;for (auto &index:classes)Q.push(make_pair(calcAdd(index[0], index[1]), make_pair(index[0], index[1])));while (extraStudents--){auto index = Q.top();int pass = index.second.first + 1;int total = index.second.second + 1;Q.pop();Q.push(make_pair(calcAdd(pass, total), make_pair(pass, total)));}double ans = 0.0;while (!Q.empty()){auto index = Q.top();int pass = index.second.first;int total = index.second.second;ans += pass * 1.0 / total;Q.pop();}return ans / classes.size();}
};
这篇关于1792. 最大平均通过率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!