求助!!!
查看原帖
求助!!!
310439
星星与辰楼主2022/10/19 23:01
#include<bits/stdc++.h>
#define inr long long
using namespace std;
#define ls id<<1
#define rs ls|1
#define mid (l+r>>1)
inline int read(){
	int num=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))num=(num<<1)+(num<<3)+(ch&15),ch=getchar();
	return num;
}
inline long long Max(const long long &x,const long long &y){return x<y?y:x;}
long long a[200020],b[200020],life[200020],damage[200020];
inline bool cmp(long long &x,long long &y){return life[x]-damage[x]>life[y]-damage[y];}
signed main(){
	int n=read(),A=read(),B=read();
	for(int i=1;i<=n;++i)life[i]=read(),damage[i]=read(),a[i]=i;
	sort(a+1,a+1+n,cmp); long long ans=0,now,cnt=0; bool flag=1;
	for(int i=1;i<=n;++i){
		b[a[i]]=i,ans+=damage[a[i]];
		if(cnt<B&&life[a[i]]>damage[a[i]])ans+=life[a[i]]-damage[a[i]],++cnt;
	}
	now=ans;
	long long lift=(1<<A);
	if(B!=0)for(int i=1;i<=n;++i){
		long long get=lift*life[i]-damage[i];
		// if(get>0){
			if(b[i]<=cnt)ans=Max(ans,now+get-life[i]+damage[i]);
			else if(cnt==B)ans=Max(ans,get+now-life[b[cnt]]+damage[b[cnt]]);
			else ans=Max(ans,get+now);
		// }
	}
	printf("%lld",ans);
	return 0;
}
2022/10/19 23:01
加载中...