【CSP-S 2021】廊桥分配 题解(多种做法)

本文详细介绍了CSP-S 2021竞赛中的一道廊桥分配问题的解题思路,包括40pts的基础解法和100pts的两种进阶解法,涉及排序、离散化、前缀和、set及优先队列等数据结构和算法。通过对不同时间线上的飞机起落情况进行处理,计算最多能容纳的飞机数量,重点讨论了在处理时间复杂度和空间复杂度优化上的策略。
摘要由CSDN通过智能技术生成

嗯。。

这道题是对我而言意义非凡的一道题

我第一次打CSP-S见到的第一道题,考场上20pts。从2021年10.24CSP当天开始 在洛谷交了很多遍。

之后看题解,有很多种这个题的做法,于是学习了一下。思想都大同小异,在实现上有着区别。、

简单来说,就是STL全家桶。

(PS:这几种做法是笔者在不同时间写的不同做法,时间跨度很大,代码风格很大,请见谅)

简易题面

分为两种停机坪,国内和国外,有 m 1 + m 2 m1 + m2 m1+m2个,给你 [ l , r ] [l,r] [l,r],为落地时间和起飞时间,不能降落的就等会再降落或者安排另外一个停机坪(如果有的话)。

给定 n , m 1 , m 2 n , m1 , m2 n,m1,m2和起飞落地时间,求最多能容纳多少飞机。

40pts 做法

我们考虑一下,

这个起飞时间其实是一个线性关系,也就是在一条时间线上,你总能找到个飞机的起飞时间和落地时间,

不过有了 n n n个停机坪的限制,我们就要考虑一些其他的东西。

设最后的答案为 t o t tot tot,那么每当一个飞机落地的时候,那么 t o t + + tot++ tot++,飞机起飞的时候, t o t − − tot-- tot

※如果 t o t tot tot + + ++ ++操作之后超过停机坪的限制数量,那么它就不能降落,同时进行标记,以防后面操作时进行 − 1 −1 1 操作。

具体做法:

(1)读入航班信息按照抵达时刻从小到大进行排序并对时刻进行离散化。

(2)枚举每个廊桥,并在上述的※条件下下对每个离散化后的时刻进行处理,依次得到最大航班数量。

(3)进行统计。

它的复杂度? O ( n m 1 + n m 2 ) O(nm_1 + nm_2) O(nm1+nm2),因为题面给的 m 1 + m 2 < = 5000 m1+m2<=5000 m1+m2<=5000,那其实在极端数据下近似为 O ( n 2 ) O(n^2) O(n2)的。

#include<bits/stdc++.h>
using namespace std;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值