题意分析
有一个人有n门课程,每一门课程他最多获得r学分,他只要所有课程的平均学分大等于avg
,他就可以获得奖学金每门课程,他已经获得了ai学分,剩下的每一个学分,都需要写bi篇论文才能得到,然后问你,这个人最少写多少论文才能获得奖学金
按照bi降序排列,从小到大选择即可。
别问我为什么要用longlong,我是不会说的
代码总览
#include<bits/stdc++.h>
using namespace std;
const int nmax = 1e6+5;
struct items{
long long a,b;
}item[nmax];
long long n,r,avg;
bool cmp(items aa, items bb){
return aa.b < bb.b;
}
int main(){
scanf("%lld %lld %lld",&n,&r,&avg);
long long standar = avg * n;
long long now = 0;
for(int i = 0;i<n;++i) {
scanf("%lld %lld",&item[i].a, &item[i].b);
now += item[i].a;
}
if(now >= standar){
printf("0\n");
}else{
long long ans = 0;
int p = 0;
sort(item,item+n,cmp);
while(now<standar){
long long tmp = min(standar - now,r-item[p].a);
now += tmp;
ans += tmp * item[p].b;
++p;
}
printf("%I64d\n",ans);
}
return 0;
}