前言
本文章只记录了模拟赛的题目,其实每日还做了其他的题,不在此做记录。
* 表示未完成的题目,^ 表示待补博客的题。
09/01
经过讨论后得到的:
T1
题面
给定一个序列
求对于
Solution
定义
反过来想,
复杂度为
注意:这里权值和
Reflect
做的时候一直往如何对集合
T2
题意
随机给出一张
时限:
Solution
将
由于每个点松弛过后,距离会减少
我们发现一个问题,如果每次都用 dijkstra 松弛,时间复杂度带
- Tip : 当边权都为
时,可以运用 01bfs 将复杂度优化成线性。
T3 P10681 [COTS 2024] 奇偶矩阵 Tablica
题意
考虑只包含
, ; , 。
求好的矩阵的数量。
Solution
考虑行向列连边,相当于左边有
假设度数为
因为左边的点本质相同,所以贡献为
发现这样计算可能会出现重边,考虑枚举重边的个数
复杂度为
T4 P11945 [KTSC 2025] 军事基地 / safezone
题意
给定
Solution
考虑对
当往线段树上加入一条线段时,线段会被拆成若干个区间,与这些区间的祖先和儿子上拆出的其他线段的编号合并。
对于祖先的合并是简单的,在拆分线段的过程中暴力合并即可;
对于儿子的合并考虑使用懒标记,在删除线段时进行合并,具体的,在线段树的每个节点上建立队列维护懒标记,表示子树内加入时间在
定义一个矩阵的加入时间为其左线段加入线段树的时间(或者左线段的横坐标);
在删除线段的时候,对经过的祖先上的懒标记队列所记录的线段编号中,加入时间比当前删除线段所在矩形的加入时间更晚的线段进行合并,并将这些线段全部弹出队列,只需要保留加入时间最晚的线段信息以便后续合并即可。
太干涩了,举个栗子,如下图中的若干个矩形,其中蓝色矩形的线段是最小的,区间值域为
灰色矩阵的加入时间比蓝色矩阵的加入时间更早,不需要合并;而后面的四个矩阵则需要和蓝色矩阵的编号合并,并弹出队列,但还要将最晚加入的矩阵(紫色)再次加入队列,用于后面的合并操作。

时间复杂度为
09/04
T1 P13532 [OOI 2023] Buying gifts / 购买礼物
题意
给定
Solution
将
那么对于 set 维护,也可以用权值线段树。
Reflect
可以用其他简单的数据结构或者方法代替线段树的时候,尽量写得简单一些。
T2 P6583 回首过去
题意
给定正整数
Solution
先来想一下一个可以表示为十进制有限小数的分数,必然可以通过不断地乘以
那么我们把
依次在
尝试通过转换枚举顺序来达到优化的目的,先枚举
记
这是一个经典的整除分块问题,但是
Reflect
连一些最基本的数学概念性问题都没搞懂???
T3 P10207 [JOI 2024 Final] 马拉松比赛 2 / Marathon Race 2
题意
在一条长为
Solution
每个球先按照顺序排序并离散化后,有球的位置的个数为
很明显的一个结论,取的第一个球必然是在
移动到
时, 移动到
时,
(这里的
观察一下题意,询问的时间限制
最后用二分找到离
Reflect
一开始想把
后面就应该要想到第一个取的球要么从最左边或者最右边的球开始,再考虑用这个写dp状态。
还要多关注数据之间的关系,考虑是否可以缩小数据,弱化题目。
T4 P10208 [JOI 2024 Final] 礼物交换 / Gift Exchange
题意
有
Solution
由于
考虑询问区间
把每一个连通分块单独拿出来分析,并按
那么反过来想,如果要不能够互送礼物,就只能是单独一个人的连通分块,题目转化成快速求
最后想如何判断
当遇到
注意:扫描到位置
复杂度为
Reflect
遇到
09/06
T1 CF1497D Genius
题意
给定
解决
解决完问题后
Solution
由于
最后总结就是一维
T2
题意
有
Solution
设
容易发现在推导过程中不同的
证明:若
根据上面的结论,可以快速算出
那么从
时间复杂度为
T3 P11340 [COI 2019] TENIS
题意
一共会进行
接下来
1 x:表示选手能否夺冠; 2 p a b:表示交换第个排名表中选手 和选手 的排名位置。
Solution
把三个场地的排名看成一个二维数列,显然的,第一列的每个编号的选手都能够夺冠;
接着讨论第二列的选手,由于第一列的选手可以淘汰掉后面所有人,假定第一列的选手编号都不一样,分别为
那么对于选手
反向思考什么情况是不满足上述情况的,那就是当第
由此我们得到了一个结论:找到一个最小的
现在考虑如何动态快速寻找
Reflect
看到有淘汰关系类型的题,其实还应该想到连边,本题也可以在连完边后的有向图上缩点后进行分析性质。
T4 P12445 [COTS 2025] 数好图 / Promet
题意
给定正整数
图中仅包含
( )的边; 满足以下条件的点
恰好有 个: - 存在
和 的路径。
- 存在
Solution
先讨论
接着构造从
令
对于更小的
类点: 满足 的路径都有,也就是 中的点; 类点: 是加入的点,满足 ; 类点: 是加入的点,满足 。
其中
后面的
类点可以被前面的 类点连; 后面的
类点可以被前面的 类点连,且必须被 类点连; 后面的
类点可以被前面的 类点连。
观察发现,前面的
从后往前枚举,
这里注意
最后考虑
定义
最后对于
时,显然答案为 ,因为但凡存在 的路径, 都属于答案。 时,先构造出任意的图,连边方案数为 ,再减去 的合法连边方案数即可。
复杂度为
09/11
T1
题意
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(l,m-1,h-1);
Qsort(m+1,r,h-1);
}
}Qsort(1,n,k) 能变成有序。
Solution
先分析清楚 Qsort 的作用,观察可得其实就是将
考虑预处理答案,
枚举当前层
复杂度为
一个小小小疑惑:查询都为
Reflect
其实已经想到预处理和dp的状态和转移思路了,就是少了最后的插板法,漏想了排序前左右两边可以互相交叉。
T2 CF1975D Paint the Tree
题意
给定一个
A 移动到相邻的点,若该点是白色的,则将其染成红色;
B 移动到相邻的点,若该点是红色的,则将其染成蓝色。
将所有顶点都染成蓝色所需要的最少步数。
Solution
- 找到
和 之间最短路径的中点 ,以 为根求跑完整棵树的最短路。
上面的结论可以用交换论证法简单证明,不再赘述。
最后求跑整棵树的最短路不必用树形 DP,小技巧吧,每条边都必然要经过两次,也就是
T3 P12546 [UOI 2025] Convex Array
题意
给定一个长度为
Solution
对
从小到大往左右序列插入
由于题目不要求计数,对于左右序列的顺序不作区分,发现
接下来讨论
在左序列中:
在右序列中:
(其中
综上,可以列出三种状态:
(包括了上面 的情况)
这里的
考虑插入
插入左序列(
): 插入右序列(
):
同理可推得
当
接下来考虑状态
插入左边(
): ,前提是 ,若不满足,说明 ; 插入右边(
): ,前提是 ,即 。
上文提到
令 map (其实也可以用其他的类似于 set 等数据结构)按
加入新的点 map 中满足
时间复杂度为 map 的
T4 P11516 [CCO 2024] Summer Driving*
点分树?蒟蒻不会,跑了跑了。
09/13
T1 P11662 [JOI 2025 Final] 方格染色 / Grid Coloring
题意
对一个
在染色结束后,求被染上的次数最多的颜色编号,以及其染色的次数。
Solution
很显然能看出来对于格子
进而可以想到维护
统计可以用 map,也可以离散化后用数组记录。
时间复杂度为
Reflect
当 map 只是用来记录出现次数时,可以换为 unordered_map。
T2 P12576 [UOI 2021] 数字图/AT_arc038_d [ARC038D] 有向グラフと数
dalao hyh 和我说这个 trick 很典也很常用!!!
题意
有一个
A 希望最大化最终获得的数字,而 B 则希望最小化最终获得的数字,两人都用最优的策略,求游戏结束时将获得的数字。
Solution
博弈论问题,小 trick:
- 二分答案
,将 的点赋值为 ;反之赋为 。
对于二分赋值后的图分析,若点
对于后手的选择明显也同上,最优的策略是把棋子权值为
如果出现
发现对于图中所连两个点权值相等的边,其实是不会走的,不妨删去;对于没有出边的点
考虑 SG 函数,反向建图,直接拓扑排序,对于起始点
思考一下,现在已知的必胜点已经没有意义了,因为从原图上来讲,没有
若点
最后判断
注意一个小问题,如果出现环,且点
时间复杂度为
T3 P11986 [JOIST 2025] 救护车 / Ambulance*
蒟蒻不会。
T4 P11303 [NOISG 2021 Finals] Pond
题意
数轴上有
注:给定
Solution
有一点像前面的那道 P10207 [JOI 2024 Final] 马拉松比赛 2 / Marathon Race 2?但是没有那么好的性质。
对
依旧暴力 dp,
观察整个移动过程,发现贡献可以拆成从
分析向左边走,对于从点
不妨让
- 转移到
时,对 的点都额外贡献了 :
- 转移到
时,对 的点都额外贡献了 :
其实转移状态的过程可以理解为找转折点(改变方向)的最优选择方案。
最终的最小时间为
但是发现转移有环且顺序不定,把转移看成正权无向图上的边,依照最短路的思想可以 dijkstra,从最小的点开始转移,考虑完
直接转移是
也可以把状态转化成凸包,
09/17
在宿舍偶遇到很有感觉的大雨,幸运当时在丢瓶子,并未洗澡,得以获得在宿舍走廊玩雨的机会(真的很爽啊qwq)
后续:晚上开始喉咙痛...
第二天下午去医院看病了...
09/16 - 09/19
09/20
CSP-2025-S1 比赛日
考点在石门实验学校,我是跟学校租的大巴一起出发和返回的。
上午补了一道模拟赛的题,浅浅看了一下初赛复习的笔记;
中午吃了顿面,回机房看已经结束的 J1 试题,最后一道题考法很新颖,于是尝试了一下。
关于考题,我压中了一道主定理,这个是我备赛第一天就笃定会考的,直觉还是不错的。
在车上讨论了一会儿,已经知道自己错了几道题,只剩
上小图灵估分,一开始是
预期:
09/22
T1 AT_abc302_g [ABC302G] Sort from 1 to 4
题意
给定一个长度为
Solution
很容易能想到让
接着一个很简单的性质,连边后必然会构成若干个环,且每个环的大小
然后就能想到依次找大小为
T2 P11338 [COI 2019] LJEPOTICA
没怎么学过数位 dp,于是趁着台风假补学了一下。
引用当天发的犇犇:
- 当你放弃记忆化搜索而选用最淳朴的方法去做多状态的数位dp,你将会达成“惊人的注意力”成就
题意
有一个深度为 L,R 的路径
Solution
很套路的数位 dp 计数题,把
注意,由于初始方向是不定的,要分别算出初始方向为左右的贡献。
每一步的贡献可能为
转移方程式是好推的,太多了不作分析,时间复杂度为
其实可以用记忆化搜索?太难理解了,不想打导致的qwq
Reflect
在考场上有一直想着怎么搞定怎么结合
T3 P12430 [BalticOI 2025] Exponents
同样的拜谢 @Lgx_Q 大佬的做法。和题解区其他做法都不一样的独特优美做法。
题意
定义
给定一个长度为
Solution
显然的,从最小的数开始合并必然是最优的,所以先考虑权值最小的连续段,设其长度为
由上可以推出:把连续段中所有数变成
令
- 引理:对于任意整数
和正整数 ,有 。 - 证明;设
,则 ; 再设 ,则 ; 于是有 。 由于 ,所以 ;因此 ,证毕。
- 证明;设
- 用归纳法证明。当
时,显然成立: 。 假设对某个 有 ,那么 ; 令 ,由引理可得 。 由数学归纳法,对任意正整数 ,有 ,证毕。
模拟一下过程,其实就是权值小的连续段向上往权值大的连续段合并;顺着思路,对全局从大到小建立出来一个广义笛卡尔树状物,对于树上的点
令
考虑将询问
- 一个小 trick:当询问
支持离线且在分治、笛卡尔树等具备树分支结构上操作时,可以尝试维护贡献的前后缀。
改定义为
维护前缀
由势能分析,每个数最多被除
T4 P9536 [YsOI2023] Prüfer 序列*
09/23
“桦加沙”台风,最低达到 900.3 百帕了?因此,佛山竟然放了两天台风假,记得上一次还是小学时的“山竹”台风。
昨天晚上不是说肯定不放假的吗???
09/24
台风在登陆向西折了,对珠三角的影响不大,我甚至都感觉没来过。
放假了,台风又过来应付一下,最好的结果?其实周末要补课...
09/25
出初赛分数了。

S 组的保护分数线是
怎么又考一套模拟赛,上一套都还没补完呢;zsq 说以后一周三套模拟赛,如何呢。
T1 AT_abc307_f [ABC307F] Virus 2
题意
给定一张
有
- 与任意一个被染成黑色的点最短距离
。
问每个点被染成黑色的最早时间,若无法被染成黑色,则输出 -1。
Solution
实质是对图跑多源最短路,问题在于如果在第
考虑用小根堆维护黑点与白点之间的连边,对于第
- 若
,则说明第 时刻初始的黑点能够到达点 ,且 ; - 若
,则说明还无法将点 染成黑色,将 加入小根堆中。
每条边都只会被遍历一次,均摊下来是
总时间复杂度为
Reflect
接下来讲一下另一种做法(也是考场上的雏形思路,顺便反思)。
定义每个点最后在第
一开始是想着对
接着发现对于每个点,在第
尝试在做多源最短路时二分答案
紧接着随着而来的又一个问题,对于点
下面的我考场上就没想到了...
其实跟第一种方法的本质的思考点,问题出在
- 若
: ;
- 反之,则说明点
在第 时刻不能被染成黑色,找到点 被染成黑色的最早时刻 ,满足 : 。
考虑第二种情况的快速转移,求区间
T2 P12426 [BalticOI 2025] BOI acronym
题意
有一个由 a,b,c 组成的长度为 a。
给定
求字符串 a 出现的位置。
Solution
令 a 出现的次数,很显然可以确定最左/右的 a 出现的位置
重要性质:考虑从左到右逐位确定每个数是否是 a。
对于 a 的个数为 a 是绝对众数:
的前提条件是满足 a是区间的众数且判定是绝对众数 : - 若
,则说明 位置上是 a;否则位置必然不为 a。
- 若
的前提条件是满足 a是区间的众数且判定是绝对众数 : - 若
,则说明 位置上是 a;否则位置必然不为 a。
- 若
和 的绝对众数都不是 a,则b,c一定分别是两边的众数(不一定为绝对众数,可能和a的数量相同),由于a是的绝对众数,所以字母 b/c不可能同时成为两边的众数:- 不妨取
和 ,分别舍去了一个 a,那么b,c分别是这两段区间的绝对众数,假设的绝对众数分别是 b,c:- 若
,则说明第 位不是 b; - 若
,则说明第 位不是 c。
- 若
- 综上所述,若同时满足
且 ,则第 位是 a。
- 不妨取
这部分是线性的,总时间复杂度为
Reflect
在 a 是绝对众数时,不能用 a,因为不能保证区间 a(我们只推出了 a,要想清楚,依据已有条件来拖判定式)。
T3 P12558 [UOI 2024] Heroes and Monsters*
T4 [Baekjoon 21096] Binary Search Tree*
09/27
T1 CF1984D "a" String Problem
题意
给定一个仅包含小写字母的字符串
; 可以由若干个 和若干个 组成; - 组成
的子串中至少有一个 。
Solution
很容易想到分类计数:
类子串:以 作为 的开头; 类子串:以其他字符作为 的开头。
显然
枚举
- 若为
,则继续跳,直至不能跳为止,如果最后 中的字符都为 ,说明这个 是满足条件的子串之一; - 否则说明这个
不满足条件,舍去。
接下来考虑怎么处理
那么就可以在找到满足条件的
由调和级数可以知道时间复杂度是
Reflect
要想完全想清楚怎么打了再去打代码,不然边打边想效率很低;还有不要乱加特判,计数时要仔细一点,想的要周到些。
T2 P11352 [NOISG 2024 Finals] Coin
题意
有
找出每个硬币首次确定排名的称量序号,或者判断这个硬币的排名永远无法确定。
Solution
很容易想到让
考虑对 DAG 做拓扑排序,显然点
- 点
出队列时,队列为空(若还有节点 在队列中,无法比较 和 的大小,也就不能确定点 的排名); - 可以由当前节点到达剩下还未入队列的点。
先想第二个条件,思考一个性质:对于 DAG 上的保留每个点的一条入边,不影响连通性。
由此对于每个点,只需要维护 未被遍历的入边 中出现的时间最小的那条边,求这些边的最大值即可,可以用 set 或优先队列实现。
对 DAG 正反做两次拓扑排序,记在正反拓扑到点
时间复杂度为 set 或优先队列(可能优先队列会更快?)的维护;空间复杂度为
T3 [Baekjoon 18760] Heavy Stones*
09/30
这个月任务量太大了,没怎么顾及这个记录,才写了两题,下个月尽量写吧...
就一直等着放假,期间和超强的 lyl 猜城市。
晚上抢十一国庆的广东博物馆票,运气好抢到了。
国庆八天假,放三天,国庆一号二号,六号中秋,呜呜呜。
10/01
去广东省博物馆咯。
10/03
不要回校集训啊啊啊!!!
今天的后两题是给人做的吗。
T1 CF1942C2 Bessie's Birthday Cake (Hard Version)
题意
有一个正
Solution
先将已知的关键点互相连边,一个
考虑在两个相邻的关键点之间选点连边,比较优的选法肯定是隔多个点选一个,贡献为
由于间隔数的大小与贡献没有关系,
如下图,两个红点为初始的关键点,黄点为选择的关键点,以

在选同样多的点的前提下,下面两种选法更劣,

最后对初始相邻两个关键点的间隔数按奇偶数分类讨论计算贡献即可,注意对
时间复杂度为
Reflect
隔一个选一个还是容易想到的,计算贡献时思路混乱了,想把初始和选择的关键点拿出来一起算,这样就必须要找出一个源点,很复杂...
以后可以在计算贡献多往子问题算再加起来想。
T2 P9737 [COCI 2022/2023 #2] Lampice
题意
在
长宽均
; 对于每种数字,要么都在子矩阵内,要么都在其外。
Solution
很明显的异或哈希(和哈希也可以),用随机哈希值(可以用自然溢出 unsigned long long),赋给同种数字的两个位置,对子矩阵做矩阵异或和
枚举子矩阵 unordered_map 利用
时间复杂度为
Reflect
一开始想着用扫描线 + 并查集实现???后面被 Lindone 大佬点破,题目只要求两个点,而我的并查集维护的是矩阵...
以后遇到判定子矩阵的数量可以往哈希上想,还有记住常用的套路:unorder_map 等计数。
T3 P7830 [CCO 2021] Through Another Maze Darkly*
T4 P11947 [KTSC 2025] 可爱区间 / maxsum*
10/04
T1 AT_abc304_f [ABC304F] Shift Table
T2 P3590 [POI 2015 R2] 三座塔 Three towers/P12765 [POI 2018 R3] 三座塔 2 Three towers 2
题意
长度为 A,B,C 三种字符的字符串
- 只有一种字符;
- 有多种字符,且任意两种字符出现的次数都不相同。
Solution
T3 P11346 [KTSC 2023 R2] 会议室 2*
T4 [Baekjoon 21089] Excluded Min*
10/05
T1 P9975 [USACO23DEC] Cowntact Tracing 2 B^
T2 P7831 [CCO 2021] Travelling Merchant^
T3 P10067 [CCO 2023] Real Mountains*
T4 P11983 [JOIST 2025] 展览会 3 / Exhibition 3*
10/07
T1 bzoj^
T2 P10299 [CCC 2024 S5] Chocolate Bar Partition^
T3 P9312 [EGOI 2021] Lanterns / 灯笼*
T4 P5642 人造情感(emotion)*
10/08
T1 AT_arc132_d [ARC132D] Between Two Binary Strings^
T2 P6294 [eJOI 2017] 游戏^
T3 PAT_arc119_f [ARC119F] AtCoder Express 3*
T4 P9058 [Ynoi2004] rpmtdq*
10/09
T1
T2 CF2006C Eri and Expanded Sets
T3 AT_arc178_d [ARC178D] Delete Range Mex^
T4 AT_arc174_f [ARC174F] Final Stage*
10/10
T1 P9350 [JOI 2023 Final] 宣传 2 / Advertisement 2^
T2 CF1473E Minimum Path^
T3 P9020 [USACO23JAN] Mana Collection P*
T4 QOJ2378*
特别鸣谢
试题出于 GJOJ,来源众多。
有部分文献参考于 garbage_fish