| 比赛 |
收心赛 |
评测结果 |
AAAAAATTTT |
| 题目名称 |
卡牌游戏 |
最终得分 |
60 |
| 用户昵称 |
KKZH |
运行时间 |
8.786 s |
| 代码语言 |
C++ |
内存使用 |
16.06 MiB |
| 提交时间 |
2026-02-24 10:33:47 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,fmn[N],bmx[N],bmn[N],fmx[N],mx,mn,ans=INT_MAX;
struct node{
int up,down;
}a[N];
bool cmp(node a,node b){
return a.up<b.up;
}
int main(){
freopen("card.in","r",stdin);
freopen("card.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
memset(fmn,0x3f,sizeof(fmn));
memset(bmn,0x3f,sizeof(bmn));
for(int i=1;i<=n;i++) cin>>a[i].up;
for(int i=1;i<=n;i++) cin>>a[i].down;
// if(n-m<m){
// m=n-m;
// for(int i=1;i<=n;i++) swap(a[i].up,a[i].down);
// }
sort(a+1,a+1+n,cmp);
fmn[1]=a[1].down;
fmx[1]=a[1].down;
for(int i=2;i<=n;i++) fmn[i]=min(fmn[i-1],a[i].down),fmx[i]=max(fmx[i-1],a[i].down);
bmx[n]=a[n].down;
bmn[n]=a[n].down;
for(int i=n-1;i>=1;i--) bmx[i]=max(bmx[i+1],a[i].down),bmn[i]=min(bmn[i+1],a[i].down);
for(int i=1;i<=n;i++){
if(a[i].up>a[i].down){
mx=i;
break;
}
}
for(int i=n;i>=1;i--){
if(a[i].up<a[i].down){
mn=i;
break;
}
}
// for(int i=1;i<=n;i++) cout<<bmn[i]<" ";
// cout<<mn<<" "<<mx<<endl;
ans=a[n].up-a[1].up;
m=min(m,n-mn+mx-1);
for(int mm=1;mm<=m;mm++)
for(int i=max(0,mm-n+mn);i<=min(mm,mx-1);i++){
int resn=fmn[i],resx=bmx[n-mm+i+1];
// cout<<i<<" "<<n-m+i+1<<endl;
if(i==0) resn=INT_MAX;
resn=min(bmn[n-mm+i+1],resn);
resx=max(resx,fmx[i]);
if(i+1!=n-mm+i+1){
if(i<n)
resn=min(resn,a[i+1].up);
if(n-m+i>0)
resx=max(resx,a[n-mm+i].up);
}
// cout<<i<<" "<<resn<<" "<<resx<<endl;
ans=min(ans,resx-resn);
}
cout<<ans;
return 0;
}