社区讨论

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 条回复,欢迎继续交流。

正在加载回复...