社区讨论
WA, 求助,标了思路
P7913[CSP-S 2021] 廊桥分配参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo7qh9ef
- 此快照首次捕获于
- 2023/10/27 06:06 2 年前
- 此快照最后确认于
- 2023/10/27 06:06 2 年前
代码:
CPP#include <cstdio>
#include <algorithm>
using namespace std;
int n, m1, m2, //廊桥个数,国内外飞机数量
a1[101], a2[101] = {0}, //抵达时刻
b1[101], b2[101] = {0}, //离开时刻
tb1[101], tb2[101]; //待排序的离开时刻
int nw(int guo) {
int num = 0, //廊桥可停最大飞机数量
k = 0,j = 0; //变量
while(k++) {
if(a2[k] > tb2[j]) { //当抵达时刻大于最早的离开时刻时
j++;
guo++; //廊桥位置空出一
}
if(k != guo) { //k不等于廊桥时
if(guo != 0) { //廊桥有空位置
if(a2[k] != 0 && b2[k] != 0) { //存在该飞机
guo--; //廊桥位置减一
}
} else {
continue;
}
} else { //k等于廊桥,即廊桥分配数达最大值
break;
}
}
return num; //返回最大飞机数量
}
int main() {
scanf("%d%d%d", &n, &m1, &m2);
for(int i = 0; i < m1; i++) {
scanf("%d%d", &a1[i], &b1[i]);
tb1[i] = b1[i];
}
for(int i = 0; i < m2; i++) {
scanf("%d%d", &a2[i], &b2[i]);
tb2[i] = b2[i];
}
sort(tb1, tb1 + m1);
sort(tb2, tb2 + m2); // 给离开时刻进行排序
int maxn = -1; // 飞机数量最大值
for(int i = 0; i <= n; i++) {
int guon = i, guow = n - i;
int num = nw(guon) + nw(guow); // num 等于 国内外飞机最大值之和
maxn = max(maxn, num);
}
printf("%d", maxn);
return 0;
}
如果思路哪一步出错求dalao讲解,拜托orz
回复
共 2 条回复,欢迎继续交流。
正在加载回复...