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