1.考点 自定义的优先队列
2.思路:把classes中的每一个列表存入一个大根堆中,cmp维护,然后sum先加一次,这是没有优等生的结果。然后放优等生,此时的结果已经在t.v中了,所以直接加这个v
3.优等生加入记得要把原来的那个pop掉
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
vector<vector<int>> classes;
int extraStudents;
struct cmp{
double v;
int a,b;
bool operator< (const cmp & t) const{
return v<t.v;
}
};
int main(){
double sum=0;
priority_queue <cmp> q ;
for(auto i:classes){
int a=i[0],b=i[1];
sum+=(double) a/b;
q.push({(b-a)/((b+1.0)*b),a,b});
}
while(extraStudents--){
auto i = q.top();
q.pop();
sum+=i.v;
int a=i.a+1,b=i.b+1;
q.push({(b-a)/((b+1.0)*b),a,b});
}
sum=sum/classes.size();
return 0;
}