比赛 收心赛 评测结果 AAAAAAAAAA
题目名称 卡牌游戏 最终得分 100
用户昵称 小福鑫 运行时间 3.208 s
代码语言 C++ 内存使用 19.39 MiB
提交时间 2026-02-24 10:12:03
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct info{
	int val,i,type;
} a[2000005];
bool operator<(const info &x,const info &y){
	return x.val<y.val;
}
int b[1000005],n,m;
signed main() {
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    cin>>n>>m;
	for(int i=1;i<=n;i++){
	    cin>>a[i].val;
        a[i].i=i;
        a[i].type=1; 
    }
    for(int i=1;i<=n;i++){
	    cin>>a[i+n].val;
        a[i+n].i=i;
        a[i+n].type=0; 
    }
	sort(a+1,a+n*2+1);
	int l=0,r=n*2+1,cnt1=0;
	while(l<n*2&&!b[a[l+1].i]&&cnt1+a[l+1].type<=m){
	    l++,cnt1+=a[l].type,b[a[l].i]++;
    }
	while(r>1&&!b[a[r-1].i]&&cnt1+a[r-1].type<=m){
	    r--,cnt1+=a[r].type,b[a[r].i]++;
    }
	int ans=a[r-1].val-a[l+1].val;
	while(l>=1) {
		cnt1-=a[l].type;
		b[a[l].i]--;
		l--;
		while(r>1&&!b[a[r-1].i]&&cnt1+a[r-1].type<=m){
		    r--,cnt1+=a[r].type,b[a[r].i]++;
        }
		ans=min(ans,a[r-1].val-a[l+1].val);
	}
	cout<<ans;
}