OI集训 Day7
Content:Competition
Date:2025.7.23
T1:宝宝巴士之小猫数数
赛时思路
开始题意理解错了,以为是倒数第二位开始的连续的 ,后面也没有什么新的思路,就用 python 打了个 的表,拿了 分的部分分。
正解
其实就是赛时的思路,根据那个方法打表,但是每次只维护前面几位 (根据样例可以知道答案很小),然后就没有然后了。
T2:宝宝巴士之换一换
赛时思路
以为时分治,每次合并跨过 的区间,维护一个双指针,每次往结果大的方向移动,同时用不在所选区间内的最大值替换所选区间内的最小值,但其实这个贪心是不对的。
正解
其中有一个 Subtask 3 对问题的思考是很有帮助的。
Solution For Subtask 3
我们发现问题的答案是 最长的连续的一的个数 和 最长的连续的二的个数 2 中的最大值。
我们由此受到启发。观察原式 ,我们考虑枚举最小值,将大于最小值的数变为 ,将小于最小值的数变为 ,那么问题转化为如何求序列中连续的 的个数。
将问题抽象出来,可以发现需要维护一个支持如下操作的数据结构:
- 单点修改
- 求连续区间
并查集可以维护。
T3:宝宝巴士之小猫过河
赛时思路
无
正解
首先我们考虑 Subtask 3 怎么做,很显然需要一个复杂度为 的做法。考虑动态规划,定义状态 ,表示左侧走了前 队猫咪🐱,右侧走了前 队猫咪, 表示上一次走的是左侧/右侧的猫咪。
发现状态太多不好优化。其实答案具有单调性 (显然),我们可以考虑二分答案,对于二分的答案 ,设当前还剩下 的时间,每一队猫的过桥时间为 ,我们把这些区间 紧挨着 排,如果发现有一对队伍 ,无论如何都会冲突,就返回 。
总结
这次比赛时间分配有问题,认为 T2 的复杂度正确,就一直在调试,希望拿到全部分,结果最后不仅没有分,还因为时间不够而没有把暴力的 的代码提交上去,后面的 T3,T4 的部分分 () 没有拿到。
接下来比赛的时候应该注意:
- 比赛前浏览题目,确定哪些部分分是可以拿到的 (在草稿纸上做好笔记,赛后复盘),能拿部分分的题目留 。
- 比赛期间不要在同一到题目上花费太长的时间,给自己一个限定的时间范围,如果在范围内没有调出来,要及时放弃。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.

