比赛 收心赛 评测结果 AAAATTTTTT
题目名称 卡牌游戏 最终得分 40
用户昵称 董彰奇 运行时间 12.617 s
代码语言 C++ 内存使用 5.96 MiB
提交时间 2026-02-24 11:12:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n, m;
struct node
{
    int a, b;
} x[1000010];

bool check(int jl)
{
    for(int i = 1; i <= n; i++)
    {
        bool p = 0;
        int idx = 0;
        for(int j = 1; j <= i - 1; j++)
        {
            if(x[i].a - x[j].a <= jl)
            {
                break;
            }
            else
            {
                if(x[i].a > x[j].b && x[i].a - x[j].b <= jl)
                {
                    idx++;
                }
                else
                {
                    p = 1;
                    break;
                }
            }
        }
        if(p)continue;
        for(int j = i + 1; j <= n; j++)
        {
            if(x[j].b > x[i].a)
            {
                p = 1;
                continue;
            }
            else
            {
                if(x[i].a - x[j].b <= jl)
                {
                    idx++;
                    if(idx > m)
                    {
                        p = 1;
                        break;
                    }
                }
                else
                {
                    p = 1;
                    break;
                }
            }
        }
        if(!p)return 1;
    }
    return 0;
}
int main()
{
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    int l = 0, r = 0;
    scanf("%d%d", &n, &m);
    int maxn = -1, minn = INT_MAX;
    for(int i = 1; i <= n; i++)scanf("%d", &x[i].a), maxn = max(maxn, x[i].a), minn = min(minn, x[i].a);
    for(int i = 1; i <= n; i++)scanf("%d", &x[i].b), maxn = max(maxn, x[i].b), minn = min(minn, x[i].b);
    r = maxn - minn;
    int ans = 0;
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(check(mid))
        {
            ans = mid;
            r = mid - 1;
        }
        else
        {
            l = mid + 1;
        }
    }
    printf("%d", ans);
    return 0;
}