CSP-S 2021

CSP-S 2021

过去了一年, 还是这么菜啊...

唉...

就在前天, CSP-S 2021 结束了, 虽然说省一应该是稳了(毕竟 SD 不是强省), 但是考得并不咋地.

不过这应该是我的最后一次 CSP 了, 心里想的还蛮多的, 这趟旅途也充满了各种美妙的声音...

在 CSP 前的第二天, 我们集体一起请假回家休息颓废了, 然后我跟老爸说好了, 我回家之后放下东西就去 gxl 家了, 然后我们俩开始了俩大老爷们儿的快乐♂.

几乎所有的时间都在肝原神, 我刚抽到的公子, 养他可废死我的劲了, 第一次感觉到贫穷(摩拉不够了), 然后短短不到两天, 用掉了 1k+ 的树脂(狗头保命).

洗澡, 换衣服, 干饭, 颓大废(肝原神), 完全没有学习的想法, 主要是怕做一个不会, 然后心态提前爆炸其实是在珍惜颓废时间.

一起刷副本, 一起探索世界, 一起打 boss, 一起办任务...

度过了一段快乐的时光.

第二天(CSP 前一天)早上 8 点被 gxl 叫醒后无情拒绝, 然后继续睡大觉, 睡到了 11 点. 然后起来之后继续颓大废, 下午 2 点吃完中饭, 3 点回家了.

到家之后奶奶生病了, 在睡觉, 我就去颓废了, 晚上奶奶醒了, 陪奶奶说了会话, 然后奶奶就休息了, 我回屋里颓大废.

一不小心又熬到很晚, 完全没有考试的压力...

旅途

第二天早上 6 点 30 起床去干饭, 然后 7 点多跟 gxl 一起出发了, 一路上有说有笑, 一起颓废, 一起聊天, 还打了会原神和 pgr, 快乐的一批, 哪怕临近入场也一点都不慌.

中午恰了好恰的, 然后继续颓大废, 照颓不误, 反正死猪不怕开水烫.

入场了.

试机, 系统是 win10 1909, 16G RAM, 09 年的老机子了, 键盘难用的要死...那个该死的''键在"""的右边, Enter 键是竖着长的, windows 键和 Fn 是换过来的...还有屎一样的分辨率...

真的大无语事件...

不过无所谓, 用几分钟配置好环境变量, 编译命令. 然后打了个 LCA 和线段树的板子.

开考了.

先读题, 看完之后啥子头绪都没有, 但是感觉似乎可做, 先开 T1.

T1 想了一会, 似乎会了, 一开始想的是先离散化, 因为我们并不关心区间的具体数值, 而只关心区间的相对关系, 然后用堆维护每个廊桥的贡献, 然后过了一会, 发现这个题不用贪心, 因为飞机是能停则停, 不能停拉倒的, 所以就简单多了, 但是为了保险, 我还是先打的暴力, 但是由于暴力只有 40pts, 我一直很慌...因为暂时不会正解.

时间过去了快 1h 了, 连读题带 T1 暴力, 我用了这么久, 心里有点慌, 但是还是冷静下来了, 想优化.

我的直觉告诉我, 这个题的大方向一定是枚举廊桥的分配, 因为这个东西不具有任何单调性, 国内和国际分别可以维护, 但是加起来是没有性质的, 所以我们必须要用 \(O(n)\) 的时间来枚举这个, 然后接下来就是用 \(O(\log n)\) 的时间来维护这个答案了, 怎么办呢...

从简单入手, 假设我们只有一个廊桥, 那肯定是能放多少飞机放多少, 不能放就走, 这个简单, 那么两个呢? 如果有一个是有飞机的, 那么肯定是放到另一个, 关键就是两个都空着的时候, 怎么放, 由于我们需要求出前若干个廊桥的贡献, 所以我们一定是优先向前放的, 所以我们需要实现的操作是---找到当前飞机可以停的编号最小的廊桥.

这样就简单多了, 我一开始想的用堆, 但是我不会, 于是我想到了分块, 维护每个块的最小值, 然后找到最靠前的块里能够停飞机编号最小的廊桥, 单次操作 \(O(\sqrt n)\) , 总复杂度 \(O(n \sqrt n)\) . 完全 ok 的, 我甚至觉得这个 \(1e5\) 就是专门给分块的.

然后我突然想到, 我不会分块...

问题不大, 这个应该也可以用线段树, 确实, 只需要维护区间最小值, 查询的时候如果左儿子的区间最小值合法就往左走, 如果右儿子的区间最小值合法就往右走, 走到头就修改, 顺便存储答案, 这样求出来的答案做一遍前缀和就是前 \(i\) 个廊桥的贡献了.

思路有了, 板子提前打过了, 直接开写, 不到 30min 就写完了. 一遍过. 时间过去了 1.5h...

然后看 T2.

第一反应, 区间 DP? 好像不难, 然后仔细思考, 不会, 拉到吧. 我好像想太简单了, 看一下暴力, 分好少...我裂开, 再少也是分啊, 开写吧, 打个 \(O(3^n)\) 的搜索, 打了快 1h 了发现不会 check...直接裂开...

然后看 T3 去了.

看了一下 \(n \le 20\) 有 40pts 诶, 这不白给?? 收下了. 然后直接一个 \(O(2^n)\) 的大搜索, 好的, 一会就写完了, 小样例, 过! 大样例, 来, 跑起来!

欸? 怎么跑不出来? 草, 复杂度是 \(O(2^{2n})\) 的, 日了.

完蛋完蛋, 还是去写 T2 吧. 然而还是不会, 最后又回到了 T3, 开始各种乱七八糟的思路, 一直有个想法, 就是从第 \(n\) 个和 \(n + 1\) 个入手, 因为这两个的位置几乎是固定的, 要么挨着, 要么隔着 \(n - 1\) 个. 但是我对于这个切入点没有任何的想法...

然后手玩了一下, 发现搜索可以剪枝. 然后把类似状压的搜索换成了枚举的搜索, 写完之后还蛮激动的, 毕竟省一应该稳了, 但是时间仅不到 0.5h, 然后就草草的收官了.

期望得分 100 + 0 + 40 + 0.

出了考场之后, 发现好多人都炸了, 对我而言也算是安慰吧, 毕竟我不是一个人了. 但每次都是这样的, 有人欢喜有人忧...

归途

出考场之后, 也没干什么事, 匆匆的就走了, 这一趟, 一直与 gxl 相伴, 尽管考的不大行, 但是充满了笑声, 在旅途中, 不要只关心结果, 多在意一下路上的风景.

posted @ 2021-10-24 20:17  sshadows  阅读(112)  评论(0编辑  收藏  举报