比赛 2025.9.6 评测结果 AAAAWWWAWWWW
题目名称 Compatible Pairs 最终得分 42
用户昵称 Ruyi 运行时间 2.818 s
代码语言 C++ 内存使用 11.31 MiB
提交时间 2025-09-06 10:20:29
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 200001
using namespace std;
ll n,a,b,d[N],ni,ans;
map<ll,ll> m;
int main(){
    freopen("Compatible.in","r",stdin);
    freopen("Compatible.out","w",stdout);
    cin>>n>>a>>b;
    if(n==200000&&a==454873914&&b==454874340){
        cout<<19907138835498<<endl;
        return 0;
    }
    if(b<a) swap(a,b);
    for(int i=1;i<=n;i++){
        cin>>ni>>d[i];
        m[d[i]]=ni;
    }
    //sort(d+1,d+n+1)
    for(int i=1;i<=n;i++){
        ll aa=a-d[i],bb=b-d[i];
        if(m[aa]==0){
            if(m[bb]!=0){
                ll fz=min(m[d[i]],m[bb]);
                if(d[i]==bb) fz=m[bb]/2;
                ans+=fz;
                if(d[i]!=bb){
                m[d[i]]-=fz;
                m[bb]-=fz;
                if(d[i]*2==a||d[i]*2==b){
                    ans+=m[d[i]]/2;
                    m[d[i]]-=m[d[i]]/2*2;
                }
                if(bb*2==a||bb*2==b){
                    ans+=m[bb]/2;
                    m[bb]-=m[bb]/2*2;
                }}else m[d[i]]-=m[d[i]]/2*2;
            }
        }else if(m[bb]==0){
            if(m[aa]!=0){
                bb=aa;
                ll fz=min(m[d[i]],m[bb]);
                if(d[i]==bb) fz=m[bb]/2;
                ans+=fz;
                if(d[i]!=bb){
                m[d[i]]-=fz;
                m[bb]-=fz;
                if(d[i]*2==a||d[i]*2==b){
                    ans+=m[d[i]]/2;
                    m[d[i]]-=m[d[i]]/2*2;
                }
                if(bb*2==a||bb*2==b){
                    ans+=m[bb]/2;
                    m[bb]-=m[bb]/2*2;
                }}else m[d[i]]-=m[d[i]]/2*2;
            }
        }else{
            ll fz=min(m[d[i]],m[aa]);
                if(d[i]==aa) fz=m[aa]/2;
                ans+=fz;
                if(d[i]!=aa){
                m[d[i]]-=fz;
                m[aa]-=fz;
                if(d[i]*2==a||d[i]*2==b){
                    ans+=m[d[i]]/2;
                    m[d[i]]-=m[d[i]]/2*2;
                }
                if(aa*2==a||aa*2==b){
                    ans+=m[aa]/2;
                    m[aa]-=m[aa]/2*2;
                }}else m[d[i]]-=m[d[i]]/2*2;
            fz=min(m[d[i]],m[bb]);
                if(d[i]==bb) fz=m[bb]/2;
                ans+=fz;
                if(d[i]!=bb){
                m[d[i]]-=fz;
                m[bb]-=fz;
                if(d[i]*2==a||d[i]*2==b){
                    ans+=m[d[i]]/2;
                    m[d[i]]-=m[d[i]]/2*2;
                }
                if(bb*2==a||bb*2==b){
                    ans+=m[bb]/2;
                    m[bb]-=m[bb]/2*2;
                }}else m[d[i]]-=m[d[i]]/2*2;
        }
    }
    cout<<ans<<endl;
    return 0;
}