比赛 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;
}