社区讨论

一堆点RE求助。。。

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

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@lo7p3mq1
此快照首次捕获于
2023/10/27 05:27
2 年前
此快照最后确认于
2023/10/27 05:27
2 年前
查看原帖
CPP
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#define maxn 100010
using namespace std;

/*
如果一架飞机过来了,在某个时间段内必然会有一个廊桥被使用
那如果我们开一个廊桥数组呢?
我们首先要知道
只有一条跑道指的是不存在同时抵达,同时离开,也不存在一个抵达一个离开的情况
这就好办多了
当有一架飞机降落的时候,我们检查这个时间的廊桥数量是否小于指定的廊桥数量
当然这里的廊桥数量需要枚举
当然实话实说,这种的只适合考场大暴力使用
*/
struct plane {
    int arr; //arrive,到达
    int lea; //leave,离开
};

bool cmp(plane a, plane b) {
    return a.arr < b.arr;
}

plane npla[maxn]; //定义国内飞机数组
plane inpla[maxn]; //定义国外飞机数组
int nation[maxn]; //国内某时间使用的的廊桥数量
int innation[maxn]; //国外某时间使用的廊桥数量
int nn; //分配给国内的廊桥数
int in; //分配给国外的廊桥数
int n, m1, m2; //见题意
int ma = 0;

int main() {
    cin >> n >> m1 >> m2;
    for (int i = 1; i <= m1; i++) {
        cin >> npla[i].arr >> npla[i].lea;
    }
    for (int i = 1; i <= m2; i++) {
        cin >> inpla[i].arr >> inpla[i].lea;
    }
    sort(npla + 1, npla + m1 + 1, cmp);
    sort(inpla + 1, inpla + m2 + 1, cmp);
    for (int nn = 0, in = n - nn; nn <= n; nn++) { //开始枚举
        int sum = 0;
        for (int i = 1; i <= m1; i++) { //开始模拟每个飞机到站
            if (nation[npla[i].arr] >= nn) { //如果当前廊桥已满(存在‘>’的情况)
                continue;//开始下一个飞机
            } else {
                sum++; //这架飞机能够停靠廊桥
                for (int j = npla[i].arr; j <= npla[i].lea; j++) {
                    nation[j]++; //这个时间段的廊桥使用数量加一
                }
            }
        }
        for (int i = 1; i <= m2; i++) { //国外的也是如此
            if (innation[inpla[i].arr] >= in) { //如果当前廊桥已满(存在‘>’的情况)
                continue;//开始下一个飞机
            } else {
                sum++; //这架飞机能够停靠廊桥
                for (int j = inpla[i].arr; j <= inpla[i].lea; j++) {
                    innation[j]++; //这个时间段的廊桥使用数量加一
                }
            }
        }
        ma = max(sum, ma); //记录
        memset(nation, 0, sizeof(nation));
        memset(innation, 0, sizeof(innation));
    }
    cout << ma;
    return 0;
}

回复

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

正在加载回复...