社区讨论

HELP

P7913[CSP-S 2021] 廊桥分配参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhke3eoa
此快照首次捕获于
2025/11/04 17:51
4 个月前
此快照最后确认于
2025/11/04 17:51
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n,m1,m2;
struct node1{
	int a,b;
	bool k;//飞机是否停在廊桥 
	int z;//0 未至 1 停 2 走 
}mn[100005];
struct node2{
	int a,b;
	bool k;
	int z;
}mw[100005];
int cnt1[100005];
bool cmp1(node1 x,node1 y){
	return x.a<y.a;
}
bool cmp2(node2 x,node2 y){
	return x.a<y.a;
}
int v1(int q){
	if(q==0){
		return 0;
	}
	int u=0;
	for(int i=1;i<=mn[m1].b;i++){
		for(int j=1;j<=m1;j++){
			if(mn[j].a>i){
				break;
			}else if(mn[j].z==2){
				continue;
			}
			else if(mn[j].a==i && q>0 && mn[j].z==0){
				u++;
				q--,mn[j].k=1,mn[j].z=1;
			}
			else if(mn[j].b==i && mn[j].k==1){
				q++,mn[j].k=0,mn[j].z=2;
			}
			if(mn[j].a==i){
				mn[j].z=1;
			}
			if(mn[j].b==i){
				mn[j].z=2;
			}
		}
	}
	return u;
}
int v2(int q){
	if(q==0){
		return 0;
	}
	int u=0;
	for(int i=1;i<=mw[m2].b;i++){
		for(int j=1;j<=m2;j++){
			if(mw[j].a>i){
				break;
			}else if(mw[j].z==2){
				continue;
			}
			else if(mw[j].a==i && q>0 && mw[j].z==0){
				u++;
				q--,mw[j].k=1,mw[j].z=1;
			}
			else if(mw[j].b==i && mw[j].k==1){
				q++,mw[j].k=0,mw[j].z=2;
			}
			if(mw[j].a==i){
				mw[j].z=1;
			}
			if(mw[j].b==i){
				mw[j].z=2;
			}
		}
	}
	return u;
}
int main(){
	cin >> n >> m1 >> m2;
	int sum=0;
	for(int i=1;i<=m1;i++){
		cin >> mn[i].a >> mn[i].b;
		mn[i].k=0,mn[i].z=0;
		for(int j=mn[i].a;j<=mn[i].b;j++){
			cnt1[j]++;
		}
	}
	for(int i=1;i<=m2;i++){
		mw[i].k=0,mw[i].z=0;
		cin >> mw[i].a >> mw[i].b;
	}
	int mx1=0;
	for(int j=1;j<=mn[m1].b;j++){
		mx1=max(mx1,cnt1[j]);
	}
	sort(mn+1,mn+1+m1,cmp1);
	sort(mw+1,mw+1+m2,cmp2);
	for(int i=0;i<=mx1;i++){
		mn[i].k=0,mn[i].z=0;
		mw[i].k=0,mw[i].z=0;
		sum=max(sum,v1(i)+v2(n-i));
	}
	cout << sum;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...