Content:Competition
Date:2025.7.23

T1:宝宝巴士之小猫数数

赛时思路

开始题意理解错了,以为是倒数第二位开始的连续的 00,后面也没有什么新的思路,就用 python 打了个 n5000n \le 5000 的表,拿了 5050 分的部分分。

正解

其实就是赛时的思路,根据那个方法打表,但是每次只维护前面几位 (根据样例可以知道答案很小),然后就没有然后了。

T2:宝宝巴士之换一换

赛时思路

以为时分治,每次合并跨过 midmid 的区间,维护一个双指针,每次往结果大的方向移动,同时用不在所选区间内的最大值替换所选区间内的最小值,但其实这个贪心是不对的。

正解

其中有一个 Subtask 3 对问题的思考是很有帮助的。

Solution For Subtask 3

我们发现问题的答案是 最长的连续的一的个数最长的连续的二的个数 ×\times 2 中的最大值。

我们由此受到启发。观察原式 (rl+1)min{al,al+1,al+2,,ar}(r-l+1)\min\{a_l, a_{l+1}, a_{l+2},\dots,a_{r}\},我们考虑枚举最小值,将大于最小值的数变为 11,将小于最小值的数变为 00,那么问题转化为如何求序列中连续的 11 的个数。

将问题抽象出来,可以发现需要维护一个支持如下操作的数据结构:

  • 单点修改
  • 求连续区间

并查集可以维护。

T3:宝宝巴士之小猫过河

赛时思路

正解

首先我们考虑 Subtask 3 n5000n \le 5000 怎么做,很显然需要一个复杂度为 Θ(n2)\Theta(n^2) 的做法。考虑动态规划,定义状态 dpi,j,0/1dp_{i,j,0/1},表示左侧走了前 ii 队猫咪🐱,右侧走了前 jj 队猫咪,0/10/1 表示上一次走的是左侧/右侧的猫咪。

发现状态太多不好优化。其实答案具有单调性 (显然),我们可以考虑二分答案,对于二分的答案 midmid,设当前还剩下 limitlimit 的时间,每一队猫的过桥时间为 ti+ki+m2t_i + k_i + m - 2,我们把这些区间 [ti,ti+ki+m2][t_i, t_i + k_i + m - 2] 紧挨着 midmid 排,如果发现有一对队伍 (l,r)(l,r),无论如何都会冲突,就返回 falsefalse


总结

这次比赛时间分配有问题,认为 T2 的复杂度正确,就一直在调试,希望拿到全部分,结果最后不仅没有分,还因为时间不够而没有把暴力的 25pts25pts 的代码提交上去,后面的 T3,T4 的部分分 (50pts+15pts50pts + 15pts) 没有拿到。
接下来比赛的时候应该注意:

  • 比赛前浏览题目,确定哪些部分分是可以拿到的 (在草稿纸上做好笔记,赛后复盘),能拿部分分的题目留 40min 50min40min ~ 50min
  • 比赛期间不要在同一到题目上花费太长的时间,给自己一个限定的时间范围,如果在范围内没有调出来,要及时放弃。