cf976e Well played!

qaq

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int n, a, b;
ll ans, tmp;
struct Node{
	ll hp, dm;
}nd[200005];
bool cmp(Node x, Node y){
	return x.hp-x.dm>y.hp-y.dm;
}
int main(){
	cin>>n>>a>>b;
	for(int i=1; i<=n; i++)
		scanf("%I64d %I64d", &nd[i].hp, &nd[i].dm);
	sort(nd+1, nd+1+n, cmp);
	for(int i=1; i<=n; i++)
		if(i<=b)	ans += max(nd[i].hp, nd[i].dm);
		else	ans += nd[i].dm;
	if(b==0){
		printf("%I64d
", ans);
		return 0;
	}
	tmp = ans;
	for(int i=1; i<=n; i++){
		ll qaq=tmp;
		if(i<=b){
			qaq -= max(nd[i].hp, nd[i].dm);
			qaq += max(nd[i].dm, max(nd[i].hp*(1<<a), nd[i].dm));
			ans = max(ans, qaq);
		}
		else{
			qaq -= nd[i].dm;
			qaq += max(nd[i].dm, max(nd[i].hp*(1<<a), nd[i].dm));
			qaq -= max(nd[b].hp, nd[b].dm);
			qaq += nd[b].dm;
			ans = max(ans, qaq);
		}
	}
	cout<<ans<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/poorpool/p/8987469.html