比赛 |
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;
}