| 比赛 |
收心赛 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
卡牌游戏 |
最终得分 |
100 |
| 用户昵称 |
rzzakioi |
运行时间 |
1.439 s |
| 代码语言 |
C++ |
内存使用 |
10.17 MiB |
| 提交时间 |
2026-02-24 09:43:24 |
显示代码纯文本
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
int n,m,cnt,ans=0x3f3f3f3f;
struct node{
int x,id;
bool op;
}a[2000005];
bool operator <(const node &x,const node &y){
return x.x<y.x;
}
int vis[1000005];
int main(){
freopen("card.in","r",stdin);
freopen("card.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].x);
a[i].op=0;
a[i].id=i;
}
for(int i=1;i<=n;i++){
scanf("%d",&a[n+i].x);
a[n+i].op=1;
a[n+i].id=i;
}
sort(a+1,a+2*n+1);
int l=1,r=1,num=0,len=0;
vis[a[1].id]++;
if(vis[a[1].id]==1)len++;
num+=(!a[1].op);
while(l<=2*n){
while((len<n||n-num>m)&&r<2*n){
r++;
vis[a[r].id]++;
if(vis[a[r].id]==1)len++;
num+=(!a[r].op);
}
if(n-num<=m&&len==n){
ans=min(ans,a[r].x-a[l].x);
}
vis[a[l].id]--;
if(vis[a[l].id]==0)len--;
num-=(!a[l].op);
l++;
}
printf("%d",ans);
return 0;
}