202509~11 测试笔记兼停课记录
暑假太摆烂了,测试全都没认真测,测完也没认真学。
* 表示未学习。
9/1
下午:统计选择半停全停,那肯定得全停。
晚上:最终 GJ 决定所有人
下午还有
T1
反思
- 组合数预处理出阶乘和阶乘的逆元做。
T2
反思
边权只有
0/1时考虑用 0/1 BFS 求最短路,时间复杂度为线性。不要保留
std::cerr。
T3 P10681 [COTS 2024] 奇偶矩阵 Tablica
题解
假设有
则有
故只需枚举一个
问题转化为有
首先有选出
先考虑不放进盒子里,只把这
接着考虑放进盒子里,同理先选
在某种方案,盒子
里放进了两个同色球。 在某种方案,盒子
放的是 色,而在另一种方案,盒子 放的是 色,这两种方案的这个盒子本质相同。
对于第二种情况,和上面交换的是同理的,乘上一个
对于第一种情况,考虑容斥,令
先从
总的式子是
时间复杂度
反思
- 二倍空间。
T4 P11945 [KTSC 2025] 军事基地 / safezone
题解
直接考虑对
考虑和儿子合并的都是些什么东西,有的矩形比这个矩形先出现,但是
时间复杂度肯定是对的,考虑线段树一个节点上的所有矩形
时间复杂度
反思
STL 只有 vector 够快。
注意扫描线边界时条件的判断,
的使用的选择。
9/2
早上
对此,dly 花费晚上
这届级组还把
晚上还因此被拉去小报告厅当内阁。
可恶啊,臭马可以全停。
9/4
T1 P13532 [OOI 2023] Buying gifts / 购买礼物
反思
孩子们 set 不欢迎不是自己的 lower_bound。
T2 P6583 回首过去
题解
赛时很快想到对于每个分母
直接优化确实很困难,但是可以换一个思路,考虑对答案贡献
显然,对于
但是并不能直接计算答案,我们对
反思
可以考虑贡献的规律,快速统计贡献的次数。
T3 P10207 [JOI 2024 Final] 马拉松比赛 2 / Marathon Race 2
题解
对于
因此有推论:第一个被取的球一定是
设
根据定义,
那么有转移:
解释一下转移方程:因为状态是准备取,所以实则
最后
时间复杂度
假设有 NO。
时间复杂度
T4 P10208 [JOI 2024 Final] 礼物交换 / Gift Exchange
题解
把每个人
因此,询问一个序列上的区间
用线段树即可处理出
问题转换为:询问一个区间
当扫到
时间复杂度
9/5
为配合南海舰队的大蛇,晚上机房拜拜,教室爽坐
9/6
爽坐
神秘新生坐不住,
原来今天还有模拟赛,机房都没有你让我做。
T1 CF1497D Genius
题解
注意到当
因此一维从小到大,另一维从大到小,双向转移即可。
时间复杂度
T2
题意
有
题解
考虑用
接下来要证明,
证明:若
,则每次被删掉的人数都 ;若 ,则显然成立。
所以,可以快速计算得出
具体地,设
接着考虑推这么多次到最终的答案
注意最后不要加超出了
时间复杂度
T3 P11340 [COI 2019] TENIS
题解
某项取得第
在某项打败了
最终,可以发现可以成为冠军的极大连通块,是排名在
假设每个选手最高排名是
可以对
时间复杂度
T4 P12445 [COTS 2025] 数好图 / Promet
IOI 2025 rk 34:孩子们这个题我只能拿
这是我能做的吗。
题解
先考虑
这样子肯定会构造出不合法的方案,因为没有保证
设
设
这时候就可以说明上文斜体内容了,转移进
加完点后,考虑点
: 是 中的答案。 : 是加的点, 能到达 ,但 不能到达 。 : 是加的点, 不能到达 。
其中
- 后面的
类点可以被前面的 类点连。 - 后面的
类点可以被前面的 类点连,且必须被前面的一个 类点连。 - 后面的
类点可以被前面的 类点连。
容易发现,前面的
设
现在就差
设
为什么这个我要拆成两行写呢?因为显然第一行的
就差
显然
对于
时间复杂度
9/7
回坑两个月,再次达成原神全收集。
晚上就做了一道题,写了点笔记,摆!
9/8
由于台风登陆,
9/9
《科学教育中心第二周教学目录》
《9月9日CSP-S模拟4》
9/10
讲题
9/11
测试被 T1 小细节想复杂爆砍
T1
题意
Query(1, n, k) 后,能够从小到大排序的排列
int a[MAXN];
int partition(int l, int r) {
int x = a[r], i = l;
for (int j = l; j < r; j +) {
if (a[j] < x) {
swap(a[i], a[j]);
++i;
}
}
swap(a[i], a[r]);
return i;
}
void Qsort(int l, int r, int h) {
if (l < r && h > 1) {
int m = partition(l, r);
Qsort(1, m - 1, h - 1);
Qsort(m + 1, r, h - 1);
}
}题解
看到数据范围,就能想到要么是
考虑执行一次 partition(l, r) 函数,其相当于与
因此,设 partition(l, r) 后的情况,执行这个函数前,序列还可能对应多种情况。
由于
而 swap 前后顺序改变,可能对应了多种情况,但实际上,右边改变前后是一一对应的。因为只有左边的当前“侵占”了右边的格子,才会导致右边的需要从左边换过来,改变了他们的顺序,而左边的格子和当前被“侵占”的格子一一对应调换,所以这一部分不用处理,最终就是
注意模数不是质数。
时间复杂度
T2 CF1975D Paint the Tree
gzw round 里面的题。
题解
先让染红和染蓝走到两点的中点会合,然后以最短路径将整棵树遍历一遍即可。
求整棵树的最短路径不一定要换根 DP,考虑如果两点染完之后必须回到一开始的中点,那么每条边都被走了
T3 P12546 [UOI 2025] Convex Array
为什么 dalao 们都如此强势。
题解
首先,
将
仔细思考一下,对于当前
, , 。
只有这三种,其中
接下来考虑从
插入左边:
插入右边:
仿照例子可补全
我们知道,
最后考虑 $1\to $ 的转移,由于有
考虑这个状态最终是转移到了第三种(
利用单调队列的思想,使用 map 即可维护 map 中 map 内
时间复杂度
* T4 P11516 [CCO 2024] Summer Driving
9/13
不如健队,回家打模拟赛了
T1 P11662 [JOI 2025 Final] 方格染色 / Grid Coloring
题解
糖题,假设
只考虑行,
对于
T2 AT_arc038_d [ARC038D] 有向グラフと数 / P12576 [UOI 2021] 数字图
原题大赛魅力时刻。
题解
部分分具有提示性的题目。
从 sub 4 入手,当点权只有
设
转移直接转移就行了,
如果
看似直接拓扑排序 DP 就行了,但是这不是 DAG,而
由于转化成
时间复杂度
T3 P11986 [JOIST 2025] 救护车 / Ambulance
题解
发掘医院性质,对于对角线上的两个医院(如

拓展到四个医院,对另外一条对角线上的医院也会有相同的性质,因此我们可以枚举两条
显然根据上文,每个部分的患者只有两个可选的医院。

定义
可以发现,部分
因此,设
转移是容易的。
- 若点
, 。 - 若点
, 。
最后令
状态数
考虑如何检验方案是否合法,枚举医院
因此,检验的复杂度为
将点按
因此,我们将状态数的
卡常小技巧:如果有大量数需要
T4 P11303 [NOISG 2021 Finals] Pond
题解
显然有类似
然后题解区大神就想到将贡献拆成直接走过去的贡献
容易将
设
设
初始条件有
假设
最终的答案是
这个转移一定是对的,你可能会觉得没有考虑到沿着一个方向一直走的情况,那其实就是令
拆开第一个括号,变为
最后还有转移顺序的问题,显然初始时解决出了
时间复杂度
9/22
T1 AT_abc302_g [ABC302G] Sort from 1 to 4
题解
对于
时间复杂度
反思
要注意值域不连续的情况,用 while 代替 if。
T2 P11338 [COI 2019] LJEPOTICA
2025-09-22 22:07:09 删除 回复 举报
什么数位DP啊,4k 124行差分计数成为最大输家
题解
先考虑差分,将
题目中提到可以开局任选左右,那么只需做一次再把操作序列反转,再做一次,就可以很好的解决。
考虑
对于任意走的答案的计算,考虑计算每一位的贡献。设
可以证明,一种变向的方式对应一个唯一的答案,因此,我们可以让后面若干步任意变向
然后
很有可能在某个状态之后,我们不能够沿着
如果走到了
时间复杂度
T3 P12430 [BalticOI 2025] Exponents
拜谢 @Lgx_Q 大佬。
题解
考虑只有一组询问
于是我们就可以得到全部合并成
接下来考虑询问
用两棵线段树维护当前
接着要把
很好理解,就是把后缀的部分和
分析一下时间复杂度,对于一次区间除,如果除以
所以只需要一个区间覆盖区间加线段树,判断相同只需要维护一下
时间复杂度
* T4 P9536 [YsOI2023] Prüfer 序列
9/25
初赛
Lindone 佬 AK 了。
T1 AT_abc307_f [ABC307F] Virus 2
笑点解析:
CSP-J2 2023:BFS + 堆实现最短路 | 2025/09:DFS + 堆实现最短路
题解
考虑一个暴力,每一天,我们让当前所有感染的点都做一次另类 Dijkstra,
考虑优化这个暴力,之前走过的边我们肯定不会再走,因为不如从他走出去的那个点开始走。
如果
这样已经是总复杂度
把所有接下来可能可以走的出边丢进另一个堆里面就行了,每一天从堆中取可以走的出来做 Dijkstra,做完再把新的丢进去。
时间复杂度
反思
笑点解析。
T2 P12426 [BalticOI 2025] BOI acronym
什么叫逐位确定最难想,哪里难想了,我对 B 不是两边的众数思考了
题解
可以得到一个最小的区间 B 都在
考虑逐位确定 B(注意到 B)。假设现在处理到 B 的个数,B 的个数。
B是的绝对众数。 - 判断是不是绝对众数,首先判断是不是众数,即
,但有可能 O在中也出现了 次,所以第二个条件是 。 - 判定第
位是不是 B:。
- 判断是不是绝对众数,首先判断是不是众数,即
B是的绝对众数。 - 判断是不是绝对众数,
。 - 判断
- 判断是不是绝对众数,
B不是上面两种情况。- 这里有一个惊人(在哪)的观察,两边必然一边的众数是
O,一边的众数是I。因为如果O既是的众数又是 的众数,他一定是整个序列的众数。 - 这个时候,我们用上面的方法即可判断出这一位是不是左边 / 右边众数对应的字母,如果都不是,那这一位就是
B。
- 这里有一个惊人(在哪)的观察,两边必然一边的众数是
时间复杂度
T3 P12558 [UOI 2024] Heroes and Monsters
题解
先将
设
同理设
状态数
现在考虑怎么把这两部分接起来。假设确定了集合
- 在
中,且在 中的 个。 - 在
中,且不在 中的 个。 - 在
中,且在 中的 个。 - 在
中,且不在 中的 个。
第
由于
时间复杂度
* T4 Baekjoon 21096 Binary Search Tree
9/27
T1 CF1984D "a" String Problem
你这什么数据啊,乱做都能过。
题解
找到第一个不是 a 的字母,去除掉 a,这个字母必然是 b,出现了 b 的个数是 a 判断合法的 a。
时间复杂度
T2 P11352 [NOISG 2024 Finals] Coin
题解
跟上一场 T3 思路挺像,但是更简单一点。
假设已经确定了拓扑序列
如果只保留
时间复杂度
T3 P11953 [科大国创杯初中组 2023] 石子
题解
考虑选定第
即
时,先合并
本质是要按平均值从小到大合并段。
对于选定的
当有多个询问时,随着
接着再考虑另一边,其实同理。那么可以得到所有段的进入时间和删除时间,于是把左右所有段的信息用扫描线维护。对于加入一个段 / 删去一个段,可以用树状数组快速统计出其贡献,就是
时间复杂度
T4 CF1975D Paint the Tree
?
10/3
T1 CF1942C2 Bessie's Birthday Cake (Hard Version)
题解
注意到每隔一个添加一个点可以添加两个三角形,而一段空格恰好可以这样添加(即到最后一个放的恰好和后面隔一个)还能多拿一个三角形,贪心即可。
时间复杂度
T2 P9737 [COCI 2022/2023 #2] Lampice
胡言乱语:看到这个题我就不会做,不会做我就想到骗分,骗分我就想到不可以总司令和星战,星战我就想到和哈希。
但是想到和哈希没有注意到特殊的
题解
和哈希,对每种的一个点赋随机值
枚举矩形在
时间复杂度
T3 P7830 [CCO 2021] Through Another Maze Darkly
题解
当一个节点
因此,经过若干次操作后,每个节点都能遍历到自己的所有儿子,答案进入循环。
考虑先求出最后循环的,发现其实就是欧拉序,定义
定义已经从
事实上,在“右儿子”和“左儿子”的欧拉序中,还会出现若干个
对于两个坏点间的欧拉序,这些点都是好点,说明我们会遍历完这一段欧拉序,所以对于这一段时间内的询问可以直接解决。
显然每个坏点只会被特殊遍历一次,其他都是并查集,所以时间复杂度
T4 P11947 [KTSC 2025] 可爱区间 / maxsum
题解
对于一个合法的区间
的最大子段和,否则不符合题意。 ,否则区间可以向左拓展。 ,否则区间可以向右拓展。 ,否则区间可以缩小右边界达到更大的子段和。 ,否则区间可以缩小左边界达到更大的子段和。
第一,二,三个条件可以轻松的
记
第五个条件相当于
考虑对
把询问按
时间复杂度
10/4
T1 AT_abc304_f [ABC304F] Shift Table
题解
枚举循环节的长度
时间复杂度
T2 P3590 [POI 2015 R2] 三座塔 Three towers
题解
考虑只有两种字母时的做法(虽然答案就是
考虑拓展到二维的情况,最优的情况下选
综上,可以得到:
- 最多有
个点覆盖。 均相同的点只出现一次。 相同的点只出现两次。 相同的点只出现两次。
接着拓展到三维的情况,同理使用
时间复杂度
10/5
T1 P9975 [USACO23DEC] Cowntact Tracing 2 B
题解
找到最小的 1 连通块即可知道最多经过了多少天,然后贪心即可。
注意这两步都要特殊处理两端的块。
时间复杂度
T2 P7831 [CCO 2021] Travelling Merchant
题解
当图中不存在出度为
当图中存在出度为
不断重复这两个过程即可。
时间复杂度
T3 P10067 [CCO 2023] Real Mountains
容易贪心得到山峰最终形态,从小到大抬升一定最优,具体考虑怎么样抬升。

对于同种数,先抬其左边一格,再抬其右边一格,最终抬起中间的绿色。
使用一个堆维护当前最低的格子的左右边界,然后用线段树维护区间大于这个值的最小值,模拟这个抬升的过程即可。
时间复杂度
10/7
T1
题目
给定
题解
正方形每条边的木棍数情况有两种:
先考虑
当
当
接着考虑
从小到大枚举
事实上,只有
T2 P10299 [CCC 2024 S5] Chocolate Bar Partition
题解
显然每个块的平均值等于全局平均值,让每个数减去全局平均值,等价于要求每个块和为
设
- 仅限在本行的一段连通块。

判定条件:
转移:
- 两行都在第
列断开的连通块。

显然,如果这么分是合法的,前面白色部分也必然需要合法的,即
转移:
- 在本行和延续一段,然后转入下一行延续一段的连通块。

同上面,判定条件是
然后考虑转移,由于这样划分出绿色的左边界是贪心得到的,因此我们要找
使用 map 维护这个 DP 即可,具体的,设
时间复杂度
10/8
T1 AT_arc132_d [ARC132D] Between Two Binary Strings
题解
显然,
那么考虑每个 1 都有一个左右活动的区间,尽量把 1 凑在一起分数更高,所以先从右往左贪心,让 1 在尽量靠一起的前提下往左靠,再从左往右贪心做一次。但是注意到如果 1 占领了两端,答案可能会更优,所以再贪心一次:让最左边可以靠左的 1 尽量贴着左边界,其他全部靠右。
时间复杂度
T2 P6294 [eJOI 2017] 游戏
题解
开局把所有数从大到小排序。对于每个询问,不断从大到小找到第一个目前可以取的数,再和当前新加入的数比较,如果新加入的数比当前找到的数要大,那就说明可以直接取新加入的,否则新加入的在后面一定会遍历到,继续往后遍历。
时间复杂度
T3 AT_arc119_f [ARC119F] AtCoder Express 3
细节细节。
题解
设
若下一个是 A 点,
- 若这一步是 A 点,直接转移:
。 - 若这一步是 B 点,那么下一个 A 可以从这个 B 跳过来,花费
,也可以上一个 A 跳过来,花费 。这个 B 可以从下一个 A 跳过来,花费 : 。
下一个是 B 点同理。
观察转移,
时间复杂度
T4 P9058 [Ynoi2004] rpmtdq
板子支配点对,后面补笔记。
10/9
T1 AT_arc170_b [ARC170B] Arithmetic Progression Subsequence
题解
容易发现,排序去重后,计
。 。
证明第一条:同一个位置上有
证明第二条:第一个位置上有
时间复杂度
T2 CF2006C Eri and Expanded Sets
题解
思考一个集合
首先,若
然后,
最后,
若