| 比赛 |
收心赛 |
评测结果 |
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;
}