2026 梦熊 NOIP 三十连测 做题记录
请结合题面阅读。
前言
教练给我买了这个三十连测,大概三四天打一场。因为闲,我准备在这篇文章中纪录每一场。
模拟一
2026/8/22 测试
T1 是一个简单分层图最短路(但是作为 T1 也不算简单?),很快就有思路了,但是调了很久,大概 \(1\)h 左右过。
T2 是构造,初步思考感觉会有很多麻烦的分讨,就先跳过了。
T3 是计数(我不爱数数 X_X),想了一会有一些初步拆解的想法,但是不知道后面怎么算,左右脑互搏了很久还是没思路,就打了 \(45\) 分暴力。
此时时间已经不多了,加上我心态炸裂,就没怎么想 T4,打了最简单的 \(5\) 分暴力就交卷了。
结果也是没有挂分,\(100+0+45+5=150\)。总之就是感觉打得很难受,可能也和我上午精神不好有关吧,下一场尽量下午打。
2026/8/24 补题
看完题解我才意识到这场有多么答辩。
T2 我的判断没错,确实是很麻烦的分讨+构造,而且可能比我想得还要麻烦?std 的代码有 10KB,吓哭了。所以就没改 T2,甚至没仔细看题解。
T3 我的初步想法是对的,就是先算恰好 \(k\) 个相同的期望贡献再用二项式反演数情况数,但是细节还挺多,花了一段时间理解,最终还是补完了。
T4 是先把能去除的边先去掉,剩下的就构成一些环和链,再贪心地选。感觉题解还是比较容易理解的,思路并不是特别复杂,也许我赛时多留一点时间能想到?不过代码很复杂(8KB),细节也很多,写了一半就不想写了。
总结:以我的能力场切 T2、T3 或 T4 确实比较困难,不过我本该更多的部分分的(T2 总共可以拼 \(40\) 分;T4 我稍微想一下就能有 \(20\) 分),这些总共拼起来也有 \(200\) 左右了。
模拟二
2026/8/25 测试
T1 是简单贪心,从小到大找到第一个合法的 mex 然后直接算就行了,\(5\)min 写完。
T2 是计数,瞪了一会发现对于 \(\sum_{i=1}^{n-1}\max(a_i,a_{i+1})\) 相同的情况,后面的情况数是相同的,就想到可以分开算。不过一开始把题看错了,没注意到 \(a\) 必须是排列,简单写了一个 \(n^4\) 的 dp,然后发现样例都过不了,才注意到题读错了,此时大约过了 \(1h\)。然后就重新开始思考,发现其实还是可以分开算,但是不知道怎么算前面的情况,就只打了个 \(2^nn^4\) 的暴力状压,期望得分 \(50\) 到 \(70\)。
T3 一眼就感觉不太可做,然后注意到写 SAM 板子就可以拿 \(32\) 分,于是写了个板子就跑路了。
T4 应该是树上数据结构,感觉可能可做,就想了大概 \(1\) h,还是没什么思路,就只打了 \(nq\) 的暴力。
此时又回去看 T2,突然发现从小到大加入元素比较好维护,然后就想到一个 \(n^4\) 的连续段 dp,然后就过了大样例。
结果是 T2 被卡常(梦熊垃圾评测机,既不开 \(O(2)\) 又跑得慢),挂到了 \(70\) 分,总共 \(100+70+32+20=222\),还行吧。然后用原题机搜到 T4 是原,简单瞟了一眼题解感觉也不是很复杂,也许再想想就会做了?
2026/8/28 补题
T2 把 memset 换成手动初始化,就 \(1500ms \rightarrow 1000ms\) 了;再在几个不会爆 long long 的地方少取几次模,就 \(1000ms \rightarrow 600ms\) 过了……原来取模这么慢的吗?
T3 简单看了一眼题解,是 ACAM(这是联赛考点吗你就考?),既然不是联赛知识点,再加上我忘记怎么写 ACAM 了,就不补题了吧。
T4 要求的 \(\min_v \max_u w_v(u)\) 实际上就是两端带权的半径,也就是直径除以二。而动态维护直径也很简单,就是开一棵线段树维护区间中直径的端点,pushup 从两个儿子的一共四个端点选距离最远的即可。实现也很简单,半个小时就写过了。
总结:这一场相对比较简单。T2 被卡常虽然主要是评测机的问题,无可厚非,但也让我意识到取模是很慢的;T3 用到了超纲算法,加上我本来就不擅长字符串,所以拿 \(32\) 分就走是正确的选择;T4 的问题还是赛时没有想到问题的转化,如果注意到就是求直径应该就能想到正解了。
模拟三
2026/8/28 测试
T1 是小清新树上问题,注意到答案求的是“至少”,直接无脑二分。然后因为每个点最多只需考虑一个球该放在哪边,就试着延后考虑,手玩了几组数据发现这些未考虑的球最多只会使每个叶子 \(+1\),这样就可以从下往上 dp 了。总共 \(20\)min 左右写完。
T2 也是树上问题。注意到满三叉树的限制使得树高是 \(\log\) 级别的,所以每次修改叶子可以暴力更新。又注意到随着 \(c\) 的增加每个叶子都更难到达根,这样就可以二分每个叶子到不了根的最早时间,因为有多组询问,整体二分就行了。然后就开始写,写了很久(好久没写整体二分了,不太熟),又调了很久,大概 \(2.5\)h 左右才过大样例。
T3 还是树上问题(怎么这么喜欢树论?)。想了一会,感觉可能想到了一个 \(n^4\) 的 dp(还没想清楚怎么算贡献),但是感觉很复杂,又只有 \(34\) 分(无良出题人,无特殊性质的测试点占了一半),就 skip 了。
T4 终于不是树上问题了(是该高兴还是失望呢?)。注意到有修改和区间询问,那单次询问大概就不是复杂的 dp(万一是动态 dp 呢?),所以直接大胆贪心。随便试了一下就想到了一种能过小样例的贪心,就直接开写 \(nq\) 的暴力,然后就过了所有大样例,期望有 \(40\) 分。感觉贪心也不好数据结构优化,加上时间也不多了,就又回去打 T3 的 \(6\) 分的指数级暴力,然后就结束了。
最终也是一分没挂,\(100+100+6+40=246\) 分。赛后没找到原题,现在也没题解,感觉自己也尽力了,就先不过多评价了。
2026/9/1 补题
实际上一题没补。
T3 是生成函数,没学过看不懂。
T4 我那个贪心的做法求的似乎就是前缀下凸包,所以正解就是线段树维护凸包。简单看了一下题解,没看太懂,不过反正联赛不考,就也不补了。
总结:评价是我尽力了。T3 和 T4 就是答辩,不看考纲这一块,建议把 T1 去掉拿后三题凑一套省选模拟。T3 我不评价正解做法,但部分分就不合理,最大的数据占了一半,链和菊花的分少得可怜,感觉就没有鼓励选手打部分分;T4 看出求凸包后基本就是线段树维护凸包的板子了,思维难度不高,纯粹看你会不会这个算法。
模拟四
2026/9/2 测试
T1 首先手玩了几组数据,发现答案就是 \(\max(\sum A_i,\sum B_i,\max A_i+B_i)\),但是因为区间是错开的,\(\max A_i+B_i\) 不好直接求。然后又发现 \(A_i+B_i\) 能取到答案的条件非常苛刻,只能在其中一个数是最大值时取到,这样就可以直接 st 表找最大值位置了。大概 \(30\) min 过大样例。(前面左右脑互搏了一会,可能是刚午睡起来不太清醒。)
T2 是算组合数式子的题,感觉不太像 NOIP 风格。瞪了一会没看到什么好的性质,注意到暴力的计算次数是 \(n/k\),就感觉可以根号分治,\(k\) 大时直接暴力。然后就是推小 \(k\) 的式子,也没什么值得记录的过程。总之,大概 \(2\) h 写完前两题。
然后就去开 T3,一眼 dp,感觉可做。不过一开始把题读错了,(好像是直接当字典序做的?不知道当时在想什么。)然后就写了大半个小时的假做法。写完发现输出的答案完全对不上,这时才意识到题读错了。然后就重新开始想,先把长度不同和相同的分开算,用一次 dp 计数前缀相同的子序列,再用两次 dp 分别对两个子序列的后缀算每种长度的子序列个数,再合并。写到合并的时候我才意识到直接合并需要对后两个 dp 数组卷积,而暴力的总复杂度是 \(O(n^3)\) 的,难道要用什么多项式技巧吗?又发呆了一会,此时时间只剩半小时了,我突然意识到我是奶龙,直接像第一次一样再做一次后缀 dp 就可以了,然后在还剩 \(5\) min 左右的时候过了。
T4 没时间看了。
结果是 T1 挂分了,因为我两个 ST 表都存的是 \(b_i\) 的值(不过这么大的错误居然只挂了 \(30\) 分?),总共 \(70+100+100+0=270\) 分。虽然几乎过了三题,不过我感觉这是我除了第一场以外打得最唐的一场,毕竟 T1 完全是唐氏错误,T3 的难度(个人感觉 T3 < T2)也不应该让我花 \(2.5\)h。继续加油吧。
2026/9/4 补题
T4 是先把每个连通块对应成区间,问题就变成选代价最少的连接点使得指定区间互相连通。\(C=1\) 的情况直接贪心,然后倍增优化就可以;一般情况就复杂很多,需要对偶数和奇数情况分别维护,还有很多细节,感觉不好想也不好写。写了一上午,又调了很久才过。如果赛时我还有时间,应该也有机会想到 \(C=1\) 的做法,拿到 \(48\) 分。
总结:这一场应该是前四场中质量最高的了,除了 T2 较难以外,其他三题的难度都非常合适。我应该在会做的前提下提高做题速度,减少因为读错题等原因导致的浪费时间。
模拟五
2026/9/5 测试
糟糕的一场。
T1 是一个奇怪的最短路问题,先瞪了半个小时没思路,然后突然发现 \(n\leq 14\),就会了 \(3^nn^2\) 的做法,\(1\)h 左右过。
T2 是计数,想了一会感觉应该可以对每一种大小的包含根的极大同色连通块计数,感觉可做,就没多想直接开始写了。然后不知道写了多久,也不知道调了多久,总之我在 \(2.5\)h 左右意识到自己的做法好像是假的,感觉也许可以改成 \(n^3\) 的暴力但也没心情改了,就看下一题去了。
T3 推了一下式子感觉可以斜率优化,看了一下数据范围发现直接背包预处理有 \(52\) 分,就先写了。然后因为各种问题,写完后只剩不到 \(30\)min 了,又想了一下感觉可以同余最短路来缩小范围,但是感觉写不完,加上我头很晕,就没写。
T4 依旧没时间看。
结果也是没挂分,\(100+0+52+0=152\) 分。这场的感觉和第一场很像,都是没想出 T2,状态就变差了。原因也没什么好说的,一方面是实力问题,另一方面就是头比较晕,导致我经常写着写着就开始发呆。
好困啊,不说了,睡觉去了。
2026/9/7 补题
T2 首先注意到只要根的颜色与所有儿子的颜色不同,那组方案就可以满足所有 \(2_{n-1}\) 种集合;而对于所有 \(c_0>1\) 的序列都是可以构造方案的。因此只需要统计 \(c_0>1\) 的序列数量就行。这么奶龙的结论为什么我赛时没有注意到!而我赛时想到的统计方法就是正确的,即设 \(f_{x,i}\) 表示 \(c_x=i\) 的方案数,转移时就用总方案数减去最大的儿子大于 \(x\) 的方案数和儿子的和小于 \(x-1\) 的方案数即可。把我原来的代码只改了几行就过了。
T3 我的思路也都是对的,在 \(x\) 较小时直接做背包,对点求凸包再在凸包上二分;\(x\) 较大时不需要同余最短路,只需找到性价比最高的操作,将前面做的背包按余数分类,再对每一个余数用均值不等式之类的数学方法算出最优点就行。赛后没看题解直接重构代码,一小时左右就写完了。
T4 涉及到 Prüfer 序列相关知识,我没学过,就不补了。
总结:这一场没我想象的难,我的问题主要还是状态和策略。首先,在 T1 感觉不可做时,我应该先检查数据范围;其次 T2 和 T3 我在赛时的做法都接近正解了,对于 T2,我应该在做这种计数时先理清思路再写,T3 没什么好说的,主要问题是状态不好以及时间不够;T4 依旧超纲算法,懒得喷。
模拟六
2026/9/8 测试
很诡异的一场。
T1 的题面就一句话:统计 GCD 为 \(1\),LCM 为 \(n\) 的集合个数。我第一眼以为是奶龙题,感觉就是对每个质因数算贡献乘起来再对每一种集合大小容斥一下,写完后发现答案不对,才意识到不好对大小容斥。然后对着题目发了一会呆,突然意识到质因数的数量很小,因此可以直接爆搜每种质因数能选的范围,并维护容斥系数,然后就过了大样例。大概 \(1\)h 左右过。(为什么写 T1 时总感觉时间过得很快?)
T2 是经典的多次询问从序列上一个点跳到另一个点的最小步数,首先想到倍增。然后稍微贪心一下发现确实可以倍增,就过了,只写了 \(20\)min 左右。(感觉 T2 小于 T1。)
T3 是一个诡异的偏序(算偏序吗?)问题。简单手玩了一下,注意到按大小关系连边后形成的图上的最长路径就是答案,而求最长路径就是缩点板子;又注意到 \(n^2\) 暴力建图就有 \(46\) 分,那还说什么?直接写!写完过了部分大样例后我又注意到大样例的答案都是 \(n\) 或 \(n-1\),感觉应该有什么性质,就造了几组数据,然后发现似乎就是数有多少个三元组严格小于其他所有三元组(显然它们是不能进入答案的),而其他的都可以进入答案。于是我就拼了一段暴力找最小三元组的代码在我的暴力中,和缩点对拍了几百组数据没有出错,那应该至少能过随机数据的部分分吧。
T4 是一个诡异的字符串问题。看了一会感觉没什么思路(其实有点暴力的思路,只是感觉很麻烦。),就只打了指数级暴力和送分的特殊性质,就交卷了。
结果也是不知道挂没挂分(T3 我自己都不知道自己有多少分),\(100+100+67+15=282\) 分。因为 T3 和 T4 都比较诡异,所以也没什么好总结的。
2026/9/11 补题
先吐槽一下这场的 pdf 题解,四道题是由三个截图拼起来的,其中一个的 latex 还炸了……梦熊你搬原题就算了,连题解都不愿意把之前的转成 .md 再拼一起吗?
然后继续吐槽题目。 先说 T3,首先原图是一个竞赛图,然后注意到/显然/易证/容易发现/由 [数据删除] 结论可知,从竞赛图的一个点 \(S\) 出发可达的所有点一定可以组成一条由 \(S\) 开始的链。知道了这个结论后剩下就都是奶龙了,用类似 BFS 的方法从每个可达的点扩展能到达的点就行,找可扩展的点可以开三棵线段树维护三种偏序。
对于 T4,约束条件等价于被删除的点在 \(T\) 上的位置必须在这个字符第一次出现的左边或最后一次出现的右边,这样就容易写出朴素的 \(O(nm)\) 的 dp。优化就是把 \(T\) 按每一种字符的限制区间分段,这样分的段是 \(|\sum|\) 级别的。然后在每一段内对应的 \(S\) 种“非必须保留”的字符都必须删除,剩下的用哈希等方法判合法性;再在分界点特殊讨论一下就行。我只看了一下大概的思路,具体细节没仔细想。
总结:感觉是比较糟糕(指题目)的一场。前两题的区分度不够;T3 主要考察竞赛图的一个结论,除此之外没有什么思维难度,因此我赛时没想到也正常;T4 应该算是唯一难度符合它的位置的好题了,按限制分段的思想很巧妙,虽然正解比较复杂,不过暴力 dp 还是比较好想的。
模拟七
2026/9/12 比赛
T1 依旧是计数,没什么值得说的地方,总之 \(30\)min 左右写完。计数真恶心……
T2 是问在一个区间内的最长的、不同数出现次数两两不同的数。想了 \(30\)min,只想到可以分开记录每一对数差值的出现位置,用线段树维护,可能还需要线段树合并+二分什么的,感觉不太像正解,就先去看 T3 了。
T3 的嵌套函数操作一眼可以写成广义矩乘的形式,拿线段树维护。但是问的是 \(\max_{l\leq p\leq r+1} g(p,r,x)\),这个东西不太好直接维护,所以我们大胆猜测它是凸的,又写了个暴力发现它确实是先单调不减再单减的,可以直接二分。我先写了个 \(n\log^2n\) 的二分+线段树,但是最大的样例跑得很慢,感觉会被卡。稍微思考一下发现可以在线段树上二分,然而直接递归操作有点复杂,所以可以先把询问对应的线段树节点记下来,先确定峰值在哪个节点对应的区间上,再从这个节点向下二分,就好写多了。然后就写完了 \(n\log n\) 的做法。
T3 的做法看似简单,我却写了很久,写完单 \(\log\) 做法后只剩半个小时了。看了一眼 T4 发现又是计数,所以果断选择不开 T4,去打 T2 暴力,然后写了 \(25\) 分。
最后没有挂分,\(100+25+100+0=225\) 分。感觉还行吧,至少赛时写出来自己认为思路和代码都不算很简单的 T3;就是 T2 有点可惜,感觉应该是有性质我没有发现,等题解出来再说吧。
2026/9/14 补题
T2 的性质是:最优解一定满足 \(\min(x-l,r-y)\leq 2\),证明说是分讨即可。然后问题就变成了固定 \(x\) 求最大的 \(y\leq l\),这个也可以先设 \(y=l\),再 \(O(1)\) 分讨找到答案,然后就做完了。感觉就是一个纯粹考察你观察能力和分讨能力的题,没什么意义。(顺便一提,T3 场上的通过率比 T2 高)
然后 T3 正解是把式子转化成 \(\max\) 套 \(\min\) 的形式,就可以根据某种单调性二分。感觉比较神秘,比如大力矩乘+二分斜率直观。
T4 看不懂题解。
总结:T2 注意到性质后暴力就有 \(80\) 分,考场上我再多观察一下样例、手玩一下说不定也能注意到,还是思考的不够;T3 的问题还是耗时太久了,现在我都回忆不起来我考场上是怎么浪费时间的了。总之还是比较正常的发挥。
模拟八
2026/9/15 比赛
T1 简单贪心,二分答案然后直接贪就行,\(25\)min 左右写完。
T2 看似是裸的最大独立集,然而 \(1\leq N \leq 10^6\),感觉比较诡异,然后当时不知道怎么想的就先开 T3 了。
T3 一句话题意就是维护字符串,支持末尾加字符和询问一个前缀对应的子串的出现次数。第一眼感觉是类似 kmp 的东西,然而 kmp 我只会被板子,并不懂得原理,感觉不太可做。然后我又想到 SAM,就发现这不是 LCT 动态维护 SAM 的 parent tree 的板子吗!然后花了一些时间重温 SAM 和 LCT,然后就过了。大概 \(1\)h 过大样例。
然后又回去看 T2,才发现它限制了独立集的点个数 \(\geq N-20\),这启示我们把最大独立集转换成最小点覆盖,因为点数很少,可以直接暴搜+剪枝。写完代码我自己也不确定复杂度是多少,不过最大的样例只跑了 \(600\)ms,就当它过了吧。
T4 是神秘树上的排列问题。我先去想了链和菊花的部分分,发现菊花的答案必定是 \(0\),链的貌似可以写一个连续段 dp。然后尝试拓展到正解,感觉也可以连续段 dp,只是因为树的形态复杂,转移的复杂度会爆炸,加上很难写,我就先去写了指数级暴力。写完后时间也不多了,就去写链的部分分,和暴力对拍了一会就交卷了。
然而,我 T3 忘记写 freopen 了!!!(猪生气.gif),最终遗憾 \(100+100+0+50=250\) 分。好猪的得分啊!这场感觉我的发挥挺好的,除去 T3 的话该拿的分都拿到了,忘写 freopen 这种事也没什么好说的,一是应该庆幸这只是模拟赛,下次注意;二是正赛环境和这也不一样(不能提前交卷),应该也不容易出现这种问题。
2026/9/18 补题
这场 rk1 的 T4 只有 \(30\) 分,也是痛失 rk1 了。
T3 我的代码虽然是对的,但是做复杂了,不需要维护 SAM 的 parent 树,直接维护 kmp 的 fail 树,答案也是子树大小。然后维护这个就类似弹飞绵羊,用 LCT 或分块什么的都可以。感觉我该加训 kmp 了。
T4 首先有一个很妙的转化,就是在同色连通块之间连边,将在连通块内部的点作为叶子挂在块上,则一个合法的原树点排列对应一个新树的边排列,要求相邻边不共点。剩下的就是计数过程,没看懂。
总结:感觉这场还是不错的,T1 难度适中,T2 需要一定的技巧但是想到了就很好写,T3 是数据结构与字符串结合,T4 比较难但是部分分也很足。我也基本该拿的分都拿了,没什么好说的。
模拟九
2026/9/20 比赛
T1 是简单贪心,容易发现一种最优情况一定形如:先降序排列,只能放一边的必须放,可以放两边的,选一个分界点,使前面的放右侧,后面的放左侧。然后做一下前后缀和就可以直接算了。不知道为什么我考场上写了 \(1\)h。(可能是中途去上厕所花了很长时间?)
T2 一眼感觉可以二分,对一个选定的答案 \(v\),更新 \(r\geq v\) 的 \(l\) 最大的 \(k\) 个区间是最优的,然而找最大的 \(k\) 个 \(l\) 貌似需要主席树之类的东西,这样总共就是 \(O(n\log^2n)\) 的,在 \(n=10^6\) 时难以通过。然后我又注意到,不同的 \(l\) 和 \(r\) 只有 \(2n\) 个,在每一段中的情况都是一样的,又因为答案不减,所以直接扫一遍就行,这样就是 \(O(n\log n)\) 的了。然而代码巨难写,细节很多,写了两个多小时才过。
写完 T2 后剩下的时间不多了,我就去想 T3 部分分,感觉没什么思路,又懒得打暴力,就直接交卷了。
然后 T2 被卡了点常,\(100+90+0+0=190\) 分,问题不大。感觉这场好难。
2026/9/21 补题
T2 把 scanf 换成快读就过了……(超过 \(10^6\) 的输入量还是写快读吧。)
T3 没有问号的做法是转换成 \(0/1/-1\) 序列,求它的最大环子段和就是答案。证明大概就是:先容易证答案不小于它,然后就有一个构造,构造方法就是阿巴阿巴(其实我没看懂。)。加上问号的做法我也没看懂……所以只写了没有问号的 \(52\) 分。
T4 依旧是困难的计数,看不懂,不想改。(顺便一提,T4 的 std 有 13KB。)
然后值得一提的是,这场每道题的 std 都是不用万能头,变量名巨长,喜欢用 class 和 namespace,私以为有 AI generated 的嫌疑。
总结:感觉这场就是比较难,加上我比较菜,所以我打得很区,不想说什么。
模拟十
2026/9/24 比赛
今天精神特别好。
T1 先注意到 \(k=i\) 时的答案一定 \(\geq i\),再往后加数没有限制,一定能有一种最优的方案使得任意两维坐标差不大于 \(1\),这样就可以直接算能加到多少。剩下的做法就类似上一场 T2,维护一个递增的指针,在当前区间的答案超过下一位就增加,就可以 \(O(n)\) 做了。大概 \(30\)min 写完。
T2 是小清新基环树题,先瞪了几分钟,然后发现是基环树,就一眼秒了。分环上没有、有一个、大于等于两个减号三种情况,没有减号就可以当树做并尽量晚切环,一个减号要在把其他减号选完后再切环,大于等于两个减号可以第一次用两个减号切环,然后就可以当树做了。感觉没 T1 难啊,也是大概 \(30\)min 写完。
T3 要求任意重排一个排列的指定区间后,按顺序建的 BST 的深度和最小。首先简单分析一下,容易发现新加的元素的父亲是在前面数值夹着它的两个元素中靠后加的那个,然后我大胆贪心,每次选最浅的点加入,然后就假了。于是我又从深度和入手,发现深度和等价于每个子树的大小之和,那怎么算子树大小呢?根据前面的分析可发现加入位置对应的一个空段里的点一定都在这个子树内。这样就变成了一个序列问题,容易用类似石子合并的区间 dp 解决,我又看了一下数据范围,才发现区间长度不超过 \(5000\)(依旧第一遍读题时不仔细看范围。),但普通区间 dp 是 \(n^3\) 的。不过 \(n^3\) 也有 \(50\) 分,我就先写了,大概想+写一共 \(1\)h。
然后去看 T4,是树上数据结构。我先去考虑对每个点,有哪些儿子应选择直接走,其他选择直接跳。容易发现直接走的肯定是距离最小的 \(k\) 个,就可以写出一个自变量是 \(k\) 的函数,做了一些变换后感觉这个函数是先减再增的,就可以二分找极小值。这样算出从一个随机点跳到每个点的期望后,我又大胆猜测从一个点出发,肯定是直接跳到几个连续的父亲,而其他点选择随机跳,这样又可以从每个点开始倍增求分界位置,然后就做完了。但是前面的二分极小值直接做还要套一层主席树或线段树合并,是 \(log^2n\) 的,显然过不了 \(10^6\),且 \(1e5\) 只有 \(40\) 分,但感觉也不好把二分放进线段树里,所以我就先写了 \(log^2n\) 的做法。写完又调了很久,才过了大样例,此时只剩 \(30\)min 了。又注意到链的情况不需要数据结构维护,所以我又在代码中嵌了一个链的特判,又多了 \(30\) 分。
交卷后,T3 的 \(n^3\) 做法貌似把 \(n=1000\) 的部分分全跑过了,于是喜加 \(25\) 分,最终 \(100+100+75+70=345\) 分,尽力了。赛后查了一下,T3 的 dp 似乎可以四边形不等式优化,但是我不会……感觉今天写了好多。
2026/9/28 补题
怎么今天才补题!
T3 确实是四边形不等式还有决策单调性什么的优化 dp,我不会,那就不补。
T4 题解先讲了一个单 \(\log\) 的主席树做法,和我的做法差不多,也是在 dfs 序上二分斜率,不过讲得不是很清楚,也不知道是怎么优化到单 $\log $ 的。感觉写题解的人也是口糊的。但是这不是最优的正解,正解是注意到如果一个点不在儿子的集合中,那它也不会在父亲的集合中,因此拿可并堆维护儿子的选点,将儿子并到父亲上一直删最大值直到不优即可。(这么一看,怎么感觉题面和做法都和 NOI2026 D1T2 很像?都是直接二分双 \(\log\),考虑换点的修改可以优化到单 \(\log\)。)
总结:感觉这场除了 T2 较水(但是难了你又不会做……)且 T3 正解超纲外,都挺好的,我打得也挺好的。
模拟十一
2026/9/27 比赛
T1 是对排列操作,考虑从置换环的角度分析,发现一次操作就是从一个环上扣下一个点,就容易写出朴素的 \(O(nk^2)\)dp,就过了,大概 \(15\)min 写完。
然后就是噩梦了。T2 我第一眼以为长度为奇数的序列只有一种操作方法,长度为偶数的序列只有两种操作方法,加上操作只有 \(\log n\) 次,直接暴搜即可。写完发现大样例错了,因为偶数不只有两种,可以任选分界点。那怎么办呢?我问我自己。然后我发现,对于一个区间,如果确定了最后删的点,那它的答案就可以由两个小区间合并。而合法最后删的点的相对位置只和区间长度有关,容易 dp 预处理。我又统计了一下所有合法点的数量,发现它远小于 \(n^2\),那就可以暴力枚举点来做区间 dp 了,复杂度我不会分析,介于 \(O(n^2)\) 和 \(O(n^3)\) 之间,总之能跑过大样例。这个思路看似不难,但我考场上总共花了 \(2\)h 才写完。
再去看 T3,先发现贪心策略就是按区间的 \(l\) 排序,一直选到选不了为止,这样就可以写出 \(18\) 分的暴力。然后我就不会了,写了暴力拼两个性质分,就走了。
此时时间已经不多了,加上 T4 连题面都很复杂,我就懒得写直接交卷了。
结果是,因为 T3 没给大样例,我的两个性质分全挂了,最终 \(100+100+18+0=218\) 分。感觉还是 T2 浪费了太多时间。
2026/9/28 补题
先说一下 T2 的复杂度,貌似可以从位运算的角度考虑,找合法点本质是枚举子集,因此复杂度是 \(O(n3^{\log_2n})\)。
然后 T3 是用线段树维护每个区间的集合对应的分段函数,因为两段分开必须要求这一段的左端点大于前面的总贡献,所以一次分段会使总贡献翻倍,最多就只有 \(\log\) 段了。然后分析一下如何合并两段,就做完了。
T4 看不懂题解。
总结:主要问题还是 T2 想太久了。T3 赛后看感觉思路也不是很复杂,重要的是要观察出段是 \(\log\) 级别的,我赛时一直不觉得能直接分段,就导致完全没往这方面想。
注:因为博主国庆出去集训了,中间三套没打,后面应该会 VP 补起来的,大概。
模拟十四
2026/10/9 比赛
T1 就是将 B 和前面的 A、后面的 C 匹配,显然让靠后的 B 去匹配 A,靠前的 B 去匹配 C 是最优的,分开 dp 再合并即可,\(20\)min 左右写完。
T2 是神秘最短路,想了一会没有想到什么比较显然的做法,就先 skip 了。
T3 是数据结构,注意到序列的值域很小,以及是统计区间的不降子序列数量,那应该可以矩乘加速 dp。但是直接线段树维护是 \(k^3q\log n\) 的,显然会 TLE,怎么办呢?注意到 \(n\) 比 \(q\) 小很多,以及没有修改操作,那应该可以换成猫树来优化,复杂度瓶颈就变成了 \(k^3n\log n\),还是比较慢。想了一会我又想到一个 trick,就是分块然后预处理散块,这样跨块的询问就可以 \(k^2q\) 地回答,只有块内询问得暴力回答,比较慢。想到这一题没有捆绑,那在出题人不恶意卡的情况下应该还是能拿很多分的,就写了。最终复杂度貌似就是 \(O(k^3n+k^2q)\),最劣会被卡成 \(O(\sqrt nk^2q)\),大样例只跑了 \(1.5\)s,就先这样吧。
然后又回去看 T2,没什么想法就直接敲了乱搞代码,就是从每个点出发跑最短路,保留最短路边建 DAG,只保留必要的边。然后,它通过了没有重边和 \(0\) 权边的大样例!然后重边很好处理,只保留最小的那一条就行, \(0\) 权边可以先跑最小生成树缩起来,然后就过了。然而我并不知道为什么这个做法是对的。
T4 不知道是什么算法,也没什么思路,就只写了 \(O(nm)\) 的暴力 dp。
最终 \(100+100+72+10=282\) 分。出题人没有恶意卡 T3 分块好评。
2026/10/12 补题
T3 确实是猫树分治,注意到一个位置对应的矩阵可以从单位矩阵修改 \(O(k)\) 个位置得到,所以做一次乘法的复杂度只有 \(O(k^2)\),直接分治就可以。
T4 没看懂题解。
总结:T3 差一步就到正解了(虽然也没有什么思维难度。),还是有点可惜。
模拟十五
2026/10/14 比赛
T1 注意到有一个比较对称的式子,直接分参发现只与 \(a_i-i\) 和 \(b_i-i\) 有关,相当于这两个值不构成偏序的都可以两边。暴力连是 \(O(n^2)\) 的,貌似可以线段树优化,但是比较复杂,然后就想到可以用并查集维护连通块,连边时把连通块合并,这样就能均摊 \(O(n)\),然后用个优先队列什么的维护就行。大概 \(20\)min 写完。
T2 是求删掉一个点后的多源最短路。最开始我的想法是维护前缀和后缀的最短路然后合并,写到一半就感觉合并是困难的;然后就想到可以像线段树一样直接分治维护删掉这个区间后的最短路,就可以直接回答了。代码不难写,但是我调了很久,最后发现问题是答案数组开小了……总共写了 \(1\)h。
T3 首先显然只扩展叶子是最优的,然后就一眼感觉是先把每个叶子扩到一样长,后面就是有周期的,然后可能要按直径长度的奇偶性分讨,就开始写了。写的过程中又想到一些细节,就边写边改,结果偶数长度直径的样例是对的,奇数长度的就一直不对,也不知道为什么,调了很久在还剩 \(1\)h 的时候放弃了。
留给 T4 的时间不多了,简单看了一眼发现是需要找性质的数据结构题,就只打了 \(20\) 分暴力。
最终 \(100+100+60+20=280\) 分,算是没挂分吧。T3 我还是感觉我的大体思路是对的,只是细节问题。

浙公网安备 33010602011771号