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