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