classSolution{
public:doublemaxAverageRatio(vector<vector<int>>& classes,int extraStudents){
// 破题点在哪儿呢?最大===>贪心===>堆// 尝试 加到每个班级 选择收益最大的 int n = classes.size();// 经典多路归并问题structNode{
double v;int a, b;booloperator<(const Node& t)const{
return v < t.v;}};
priority_queue<Node> heap;double sum =0;for(auto&c: classes){
int a = c[1], b = c[0];
sum +=(double) b / a;
heap.push({
(a-b)/(a*(a+1.0)), a, b});}while(extraStudents --){
auto t = heap.top();
heap.pop();int a = t.a +1, b = t.b +1;
sum += t.v;
heap.push({
(a-b)/(a*(a+1.0)), a, b});}return sum / n;}};