比赛 2025.9.6 评测结果 AAAAWWWWWWWW
题目名称 Compatible Pairs 最终得分 33
用户昵称 梧叶已同秋雨去 运行时间 3.516 s
代码语言 C++ 内存使用 14.39 MiB
提交时间 2025-09-06 11:49:59
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,a,b,ans,ansa,ansb;
struct node{
	long long d,n; 
}t[200005]; 
map<long long,long long>mp;
int main(){
	freopen("Compatible.in","r",stdin);
	freopen("Compatible.out","w",stdout);
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		cin>>t[i].n>>t[i].d;
		mp[t[i].d]=t[i].n;
	}
	for(int i=1;i<=n;i++){
		int nda=a-t[i].d;
		int ndb=b-t[i].d;ansa=0;ansb=0;
		if(nda>=0&&mp[nda]>0){
			if(nda==t[i].d){
				ansa=t[i].n/2;
			}else{
				ansa=min(mp[nda],mp[t[i].d]);
			}
			if(ndb>=0&&ansa<mp[t[i].d]&&b!=a){
				if(ndb==t[i].d){
					ansa+=(mp[t[i].d]-ansa)/2;
				}else
					ansa+=min(mp[t[i].d]-ansa,mp[ndb]);
			}
//			cout<<t[i].d<<" "<<ansa<<endl;
		}
		if(ndb>=0&&mp[ndb]>0&&a!=b){
			if(ndb==t[i].d){
				ansb=t[i].n/2;
			}else{
				ansb=min(mp[ndb],mp[t[i].d]);
			}
			if(nda>=0&&ansb<mp[t[i].d]){
				if(nda==t[i].d){
					ansb+=(mp[t[i].d]-ansb)/2;
				}else
					ansb+=min(mp[t[i].d]-ansb,mp[nda]);
			}
//			cout<<t[i].d<<" "<<ansb<<endl;
		}
		if(ansa>=ansb){
			mp[nda]-=ansa;
			mp[t[i].d]-=ansa;
		}else{
			mp[ndb]-=ansb;
			mp[t[i].d]-=ansb;
		}
		ans+=max(ansa,ansb);
	}
	cout<<ans;
	return 0;
}