比赛 收心赛 评测结果 AAAAAAAAAA
题目名称 卡牌游戏 最终得分 100
用户昵称 杨蕙宇 运行时间 3.423 s
代码语言 C++ 内存使用 23.03 MiB
提交时间 2026-02-24 10:28:48
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
int n,m;
ll a[N],b[N];
typedef pair<ll,ll>PII;
priority_queue<PII>mx;
priority_queue<PII,vector<PII>,greater<PII>>mn;
int main(){
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)cin>>b[i];
    for(int i=1;i<=n;i++)mx.push(make_pair(a[i],b[i]));
    for(int i=1;i<=n;i++)mn.push(make_pair(a[i],b[i]));
    while(1){
        PII maxx=mx.top();
        PII minn=mn.top();
        mn.pop();mx.pop();
        PII mx2=mx.top();
        PII mn2=mn.top();
        ll rmn=0,rmx=0,rr=0;
        if(minn.first<minn.second){
            rmn=(min(minn.second,mn2.first)-minn.first)+(maxx.first-max(minn.second,maxx.first));
        }
        if(maxx.first>maxx.second){
            rmx=(maxx.first-max(maxx.second,mx2.first))+(min(maxx.second,minn.first)-minn.first);
        }
        if(minn.first<minn.second&&maxx.first>maxx.second){
            rr=(min(maxx.second,min(minn.second,mn2.first))-minn.first)+(maxx.first-max(max(maxx.second,mx2.first),minn.second));
        }
//        cout<<m<<" "<<rmn<<" "<<rmx<<" "<<rr<<endl;
        if(m>=2&&rr>0&&rr>=rmn&&rr>=rmx){
            swap(minn.first,minn.second);
            swap(maxx.first,maxx.second);
            mn.push(minn);
            mx.push(minn);
            mn.push(maxx);
            mx.push(maxx);
            m-=2;
        }
        else if(m>=1&&rmn>0&&rmn>=rmx&&rmn>=rr){
            swap(minn.first,minn.second);
            mn.push(minn);
            mx.push(minn);
            mn.push(maxx);
            mx.push(maxx);
            m--;
        }
        else if(m>=1&&rmx>0&&rmx>=rmn&&rmx>=rr){
            swap(maxx.first,maxx.second);
            mn.push(maxx);
            mx.push(maxx);
            mn.push(minn);
            mx.push(minn);
            m--;
        }
        else if(m>=1&&rmn>0&&rmn>=rmx){
            swap(minn.first,minn.second);
            mn.push(minn);
            mx.push(minn);
            mn.push(maxx);
            mx.push(maxx);
            m--;
        }
        else if(m>=1&&rmx>0&&rmx>=rmn){
            swap(maxx.first,maxx.second);
            mn.push(maxx);
            mx.push(maxx);
            mn.push(minn);
            mx.push(minn);
            m--;
        }
        else{
            mn.push(maxx);
            mx.push(maxx);
            mn.push(minn);
            mx.push(minn);
            break;
        }
        if(m==0)break;
//        cout<<m<<" j "<<mx.top().first<<" "<<mn.top().first<<endl;
    }
//    cout<<mx.top().first<<" "<<mn.top().first<<endl;
    cout<<mx.top().first-mn.top().first;
    return 0;
}