| 比赛 |
收心赛 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
卡牌游戏 |
最终得分 |
100 |
| 用户昵称 |
ychyyx |
运行时间 |
1.808 s |
| 代码语言 |
C++ |
内存使用 |
11.30 MiB |
| 提交时间 |
2026-02-24 10:49:24 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
struct node{
int x,id,p;
}a[2000005];
bool b[1000005];
bool cmp(node x,node y){
return x.x<y.x;
}
int cnt;
int ans=1e9;
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].id=i;
a[i].p=1;
}
for(int i=n+1;i<=2*n;i++){
scanf("%d",&a[i].x);
a[i].id=i-n;
a[i].p=0;
}
sort(a+1,a+1+n*2,cmp);
int l=0,r=2*n+1;
while(b[a[l+1].id]==0&&cnt+a[l+1].p<=m){
l++;
b[a[l].id]=1;
cnt+=a[l].p;
}
while(b[a[r-1].id]==0&&cnt+a[r-1].p<=m){
r--;
b[a[r].id]=1;
cnt+=a[r].p;
}
while(l>=0){
ans=min(ans,a[r-1].x-a[l+1].x);
b[a[l].id]=0;
cnt-=a[l].p;
l--;
while(b[a[r-1].id]==0&&cnt+a[r-1].p<=m){
r--;
b[a[r].id]=1;
cnt+=a[r].p;
}
}
printf("%d",ans);
return 0;
}