8. Maximum Average Pass Ratio
Input: classes = [[1,2],[3,5],[2,2]], extraStudents = 2
Output: 0.78333
Explanation: You can assign the two extra students to the first class. The average pass ratio will be equal to (3/4 + 3/5 + 2/2) / 3 = 0.78333.Input: classes = [[2,4],[3,9],[4,5],[2,10]], extraStudents = 4
Output: 0.53485Solution:
class Solution
{
public:
struct comparator
{
bool operator()(pair<int, int> p1, pair<int, int> p2)
{
double x = p1.first;
double y = p1.second;
double a = p2.first;
double b = p2.second;
double r1 = x / y;
double r2 = a / b;
x++;
y++;
a++;
b++;
double newr1 = x / y;
double newr2 = a / b;
double dif1 = newr1 - r1;
double dif2 = newr2 - r2;
return dif1 < dif2;
}
};
double maxAverageRatio(vector<vector<int>> &classes, int extraStudents)
{
int n = classes.size();
priority_queue<pair<int, int>, vector<pair<int, int>>, comparator> pq;
for (int i = 0; i < classes.size(); i++)
{
pq.push({classes[i][0], classes[i][1]});
}
while (extraStudents--)
{
double pass = pq.top().first;
double student = pq.top().second;
pq.pop();
pass++;
student++;
pq.push({pass, student});
}
double s = 0;
while (!pq.empty())
{
double pass = pq.top().first;
double student = pq.top().second;
pq.pop();
double ratio = pass / student;
s += ratio;
}
return s / n;
}
};Last updated