题解 CF492C Vanya and Exams

CF492C Vanya and Exams

有了Pascal题解,来一波C++题解呀qwq。。

简单的贪心题

按b[i]从小到大排序,一个一个学科写直到达到要求即可

#include<cstdio>
#include<algorithm>
using namespace std;
struct number {
	long long a,b;
	bool operator <(const number &x)const {
		return b<x.b;
	}
} a[100005];
long long ans,sum,n,r,ave;//不开long long最后一个点WA
int main() {
	scanf("%lld%lld%lld",&n,&r,&ave),sum=n*ave;//总共需要的学分
	for (int i=0; i<n; i++) scanf("%lld%lld",&a[i].a,&a[i].b),sum-=a[i].a;
	if (sum<=0) {//若当前学分已大于大于所需,直接输出
		puts("0");
		return 0;
	}
	sort(a,a+n);//按a[i].b排序
	for (int i=0; sum>0 && i<n; i++) {
		ans+=a[i].b*min(sum,r-a[i].a);//每个学科的论文要么尽量写完(最多只能赚r-a[i].a个学分),要么写到达到要求即可
		sum-=(r-a[i].a);//减去写论文所得学分
	}
	printf("%lld",ans);
}
原文地址:https://www.cnblogs.com/Randolph68706/p/11301595.html