20260814 - 杂题一锅炖
一、比赛基本情况
- 比赛日期:2026 年 8 月 14 日
- 比赛时长:3.00000000000000004 小时
- 比赛得分:4.00000000000000004 分
- 比赛排名:第 7 名
二、比赛整体回顾
这场比赛我按照 A、C、D、E、B、F 的顺序做题。
™ 的 vscode 输入一个数 RE,写了个主函数 RE,空代码也 RE,Dev C++ 靠谱。
T1 因为某某编译器导致写什么都 RE,卡了 30 min。
T2 由于二分老是写错,然后看下道题了。
T3 简单的树形 DP,秒了。
T4 观察了一会,写了个离谱做法,过了。
T5 简单的枚举,秒了。
T6 之前做过一个题目,CF1526C2,也是反贪的题目,和这道题思想一模一样。
三、题目复盘
A - Grandma Capa Knits a Scarf
- 本题得分:\(100\) 分
- 开始时间:14:00:00
- 结束时间:14:37:45
- 总用时间:0:37:45
初始思路
枚举每一个字符然后判断是否是可以构成回文。
考场解题过程
首先先搞了一个乱搞做法,没有对;(应该检查的)
随后重新写了一个代码,然后就过了。
赛后题解
我们可以枚举删去的字符,再用扫一遍这个字符串,计算出删去的字符数,记录下最小值即可;当双指针指向的两个字符不同,也不为删去的字符时,当前方案不合法。
复杂度
- 时间复杂度:\(O(nk)\),\(k\) 为字符集,这里取 \(26\)。
- 空间复杂度:\(O(n)\)。
本题总结
这道题不难,但是要边界情况。
以后做完简单题也不能马上提交,至少要自己测试两组数据。
B - Jumping Through Segments
- 本题得分:\(100\) 分
- 开始时间:14:37:45
- 结束时间:16:17:41
- 总用时间:01:39:56
初始思路
一看就知道是二分,然后 check 就是看两端是否可以到达,可以就行不可以就不行。
考场解题过程
首先先分类讨论一坨东西,后面发现就是简单的比较(所以说如果一个思路想太久了,就换一个)
赛后题解
判断时记录每次可以跳到的边界,若跳最远也无法抵达目标线段则不符合。跳 \(n\) 次若都能跳到目标线段上即是可行的。
复杂度
- 时间复杂度:\(O(n\log_2n)\)。
- 空间复杂度:\(O(n)\)。
本题总结
这道题不难,注意不要想歪了。
C - Infected Tree
- 本题得分:\(100\) 分
- 开始时间:14:37:45
- 结束时间:15:01:50
- 总用时间:00:24:05
初始思路
看到最大保留就想到了树形 DP,观察了一下发现不需要用到数据结构。
考场解题过程
写出转移方程秒了。
赛后题解
树形 DP,状态就是 dp[i] 表示在以 i 为根的子树中,若 i 被感染病毒,最多能保留多少节点。
假如要删除左边,就保留了 siz[ls] - 1 的贡献,我们任然可以保留 dp[rs] 个点,另外的同理。
所以转移方程就是 dp[i] = max(dp[ls] + siz[rs] - 1, dp[rs] + siz[ls] - 1)。
复杂度
- 时间复杂度:\(O(n)\)。
- 空间复杂度:\(O(n)\)。
本题总结
树形 DP 的好题,还总结了一道好题 P3000。
D - Array Destruction
- 本题得分:\(100\) 分
- 开始时间:15:01:50
- 结束时间:15:37:40
- 总用时间:00:35:50
初始思路
首先如果最高的都不选进来,一定构成不了,所以可以枚举和哪一个配对。
考场解题过程
首先因为是有重复的,所以得用 multiset,一开始开的 set 调了很久,
赛后题解
由于枚举了和哪个配对,所以可以用 multiset 快速维护。
复杂度
- 时间复杂度:\(O(n^2\log_2n)\),常数很大。
- 空间复杂度:\(O(n)\)。
本题总结
主要性质是观察到如果最高的都不选进来,一定构成不了,如果这里懂了,就会做了。
E - Numerical Sequence (easy version)
- 本题得分:\(100\) 分
- 开始时间:15:37:40
- 结束时间:15:56:55
- 总用时间:00:19:15
初始思路
由于很小,所以可以枚举。
考场解题过程
枚举是 \(10^k\) 的数,如果会进位就加一。
赛后题解
枚举第 \(k\) 位,如果还不够,就继续,否则继续增加。
复杂度
- 时间复杂度:\(O(?)\),玄学。
- 空间复杂度:\(O(1)\)。
本题总结
本题主要考察暴力怎么写,会写暴力就会吧。
F - Money Buys Less Happiness Now
- 本题得分:\(100\) 分
- 开始时间:15:56:55
- 结束时间:16:46:03
- 总用时间:00:49:08
初始思路
想到了 CF1526C2 的做法,就是如果已经欠钱了,就丢掉最大的。
考场解题过程
就是差不多的代码。
赛后题解
首先考虑没有欠钱,直接买。
否则肯定丢掉最大的一个,这样最优。
复杂度
- 时间复杂度:\(O(n\log_2n)\)。
- 空间复杂度:\(O(n)\)。
本题总结
双倍经验 CF1526C2。
四、整体反思
做得较好的地方
后面的题目都能想到解题思路。
需要改进的地方
T1 因为编译器导致浪费 30min,下次直接用 Dev-C++ 传统。
T2 想复杂了,要先到草稿纸上画一画,以后遇到不会的题,不能一直停留在同一种思路上。

浙公网安备 33010602011771号