比赛 |
HAOI2021 Day1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
卡牌游戏 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
运行时间 |
0.686 s |
代码语言 |
C++ |
内存使用 |
8.11 MiB |
提交时间 |
2022-04-13 10:17:57 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,minn,maxn,head,tail;
int a[1000005],b[1000005];
struct node1{
int a;//max
int b;//max renew_min
int c;//max renew_max
}ma;//max
struct node2{
int a;//min
int b;//min renew_min
int c;//min renew_max
}mi;//min
void read(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
}
void work(){
for(;;){
if(m<=0||tail<=head){
cout<<ma.a-mi.a<<endl;
return;
}
m--;
mi.b=mi.c=mi.a;
ma.b=ma.c=ma.a;
if(a[head]==mi.a&&b[head]>a[head]){
if(b[head]<ma.a){
mi.b=min(a[head+1],min(b[head],minn));
}
else{
if(b[head]-min(minn,a[head+1])<ma.a-mi.a){
mi.b=min(minn,a[head+1]);
ma.b=b[head];
}
}
}
if(a[tail]==ma.a&&b[tail]<a[tail]){
if(b[tail]>mi.a){
ma.c=max(a[tail-1],max(b[tail],maxn));
}
else{
if(max(maxn,a[tail-1])-b[tail]<ma.a-mi.a){
ma.c=max(maxn,a[tail-1]);
mi.c=b[tail];
}
}
}
if(ma.a-mi.a>ma.c-mi.c){
maxn=max(maxn,b[tail]);
tail--;
ma.a=ma.c;
mi.a=mi.c;
}
else{
if(ma.b-mi.b<ma.a-mi.a){
minn=min(minn,b[head]);
head++;
ma.a=ma.b;
mi.a=mi.b;
}
}
}
}
int main(){
freopen("haoi2021_card.in","r",stdin);
freopen("haoi2021_card.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
read();
mi.a=a[1];
ma.a=a[n];
minn=1e9+5;
maxn=-1e9-5;
head=1;
tail=n;
work();
return 0;
}