社区讨论
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 条回复,欢迎继续交流。
正在加载回复...