2026 日记
February
2.9
开始写日记!
来就先切了道 CF985F,注意在第 16 个点会 WA,因为你代码的哈希如果没有取模会造成冲突,可以考虑取模来解决。
接着是 P3065,不难想到把值都扔上 Trie 树,但你会发现贪心是错的,你没法确定字典序。
如:
2
acc
acb
由此发现贪心是错的。
因为会存在优先级的顺序,所以我们可以根据钦定的字符串的每一位置来建图。
具体的,假如说我要求 \(m\) 比 \(a\) 小,那后面如果出现了一个字符比 \(a\) 大,比 \(m\) 小,那就不合法。
在图上就是形成了环,由此,跑拓扑序即可。
2.10
早上过来先把昨天没做的 P3065 给写了,然后就是听讲。
下午先写了 CF1167F,事实上,你打出暴力后会发现这只和两个点之间的大小关系以及两点之间所在位置的顺序有关,可以考虑把他扔到树状数组上维护即可。
2.11
昨晚讲课,没时间写题,先花了一小时把 CF1228E 给写了。
你会发现,我们定义两个数组 f 和 \(g\) 分别表示至少有 \(i\) 行 \(j\) 列不满足要求以及恰好有 \(i\) 行 \(j\) 列不满足要求。
用二项式反演容斥即可。
下午打了场新春欢乐赛,和 PLH 拿下 rk 7 成为二等奖守门员。
2.25
返校第一天,配置环境配置了一个小时。
挑战了一下 AT_abc405_g 发现复杂度带了只 \(\log\) 会 TLE 但我们可以考虑分块优化修改时的复杂度,这一点可以优化到 \(O(1)\),最终复杂度就去掉 \(\log\) 了。
2.26
早上把昨天晚上没打出来的的 CF2203E 写了,性质很好想,当已经确定了数字 A 后发现数字 B 的最优策略是在离 A 最近的两个点上,分别计算两点所得的分数,取最大值即是选择 B 的最优方案。
我们可以发现分数的图像存在单谷结构,可以考虑二分或三分来处理,复杂度 \(O(n \log^2 n)\)
下午先来写图论专题。
先来写 P1948 有一种很巧妙的思路,可以二分答案然后计算是否存在一条路径满足处理后代价 \(\le mid\)。
对于 check 函数,可以考虑将大小大于 \(mid\) 的边记为 1,剩下的记为 0,然后 01BFS 来跑一遍看最短路是否 \(\le k\) 即可。
2.27
先写了 P10928 思路不难想,可以考虑模拟一遍 Kruskal 的过程即可。
但我 RE 了。
原因是在排序的时候把 w<wl 写成了 w<=wl。
接着就是 P10929 不难想到跑完一遍 dij 之后可以考虑维护每个点都可以由哪个点转移过来,再根据乘法原理乘起来即可。
在第 3 节上课前把 P10931 给过了。
事实上是个很好的树上差分问题,可以考虑定义 \(f_i\) 表示 \(i\) 的子树内有多少条边连向了另一块树上,只需每次访问到一个附加边时把 \(f_u\) 和 \(f_v\) 加上 1,他们的 \(lca\) 减去 2 即可。
回来改了一下 HDU4578 放假前留的题。
我们可以考虑重载信息(info)和懒标记(tag)这样方便后续操作。
剩下就是细节问题,错就错在处理 info 合并时没有把区间长度和端点考虑进去。
March
3.2
花了快一上午的时间解决 P3008 明知不能用 SPFA 作死获得了 88pts 的好成绩。
事实上,我们可以考虑用并查集缩点来优化,然后根据拓扑序来跑 dij 由此,复杂度降下来了。
下午先写了 P2886 我们发现 \(T\) 的值很小,可以考虑把输入的点离散化掉。
在考虑后发现如果将题目中的边与边之间的信息转化为矩阵则可以考虑将两个矩阵的信息合并起来,这是个广义矩阵乘法,发现它显然满足结合律,于是可以考虑矩阵快速幂来解决,复杂度 \(O(T^3 \log n)\)
3.3
上午先解决一下 P3629 我们发现,如果不加边,那距离就只能是 \(2 \times (n - 1)\)。
同理,我们发现新加的边只能通过一次,所以当 \(k=1\) 时只需把直径两端连接起来即可,答案是 \(2 \times n - L1 - 1\)。
当 \(k=2\) 时,可以考虑将直径上的所有边权赋为 -1 然后再计算一遍直径即可,答案就是 \(2 \times n - L1 - L2\)。
下午先解决了 P6066,简单题,直接跑欧拉回路即可。
接着是 P3469 发现只需在跑点双的时候记录一下值即可。
3.4
【数据删除】
3.5
感觉没必要写的就不写了。
写一下 CF1083B,不知道这道 *2000 咋评到蓝的。
一个很直接的思路就是枚举第 \(i\) 号位所在的状态,如果说出现不同,将累加系数 \(\times 2\),但你过不去第 3 个样例。
再次思考发现就是要求在一颗 Trie 树上每一层的节点 \(\le k\) 的情况下最大化节点数量。
这似乎好求,可以考虑记录前 \(i\) 个所做出的前缀总数,在每一访问到一个 \(i\) 时,之前的前缀都可以选择 \(a\) 或 \(b\),但如果说:
- \(s_i=b\)
- \(t_i=a\)
那方案数需要减一。
3.6
和 Danielcdo 打了场 duel 被爆杀了。
来写写 CF208E。
我们把题目拆成两个部分:
- 求出 \(v_i\) 的 \(p_i\) 级祖先
- 求出祖先的 \(p_i\) 级子孙的数量
我们发现对于问题一是容易的,简单 \(lca\) 即可。
思考问题二发现,目的只是在于祖先的字树内,这启示我们可以考虑结合 \(dfn\) 序来考虑,我们只需考虑深度为 \(v_i\) 的深度的点是否在祖先的 \(dfn\) 序包含内,这其实只需按他们的 \(dfs\) 序排列即可,最后可以二分解决。
3.9
【数据删除】
3.10
尝试一下 P1600,原来是树上差分吗。
发现对于最短路径 \((u,v)\) 我们可以考虑分类讨论。
对于 \((u,lca(u,v))\) 只需判断是否满足 \(dep_u=dep_i+w_i\) 其中 \(i\) 是路径上的点。
\((lca(u,v),v)\) 同理。
3.11
开 P4556,树上差分是好想的,主要是考虑区间最值的问题,这只需加上线段树合并即可。
3.12-3.15
【数据删除】
3.16
转眼间有好久没记了。
调了半天的 P1120 远古剪枝题,当时好像是因为一个地方剪枝剪错了挂到了 78pts。
最后是有一步卡常的,在 Linux 下可以使用 getchar_unlocked() 和 putchar_unlocked(),以及逻辑运算符是比位运算要慢的。
3.17
昨晚打了场 Edu188 虽说没有上一场 2168 的 perf 那么恐怖,但还是有 1783,能涨就行。
3.18
想了半天的 P10930 发现只会操作一、三,看了下蓝书这才知道这个神仙结论。
我们发现对于点集 \(S\) 可以考虑对于按照它们的 dfn 序来排列,这样只需计算两点之间的距离即可,这里可以用线段树二分或 set 维护。
3.19
【数据删除】
3.20
调 P4381 就调了一下午。
事实上而言,这就是个基环树直径的板子,但我为何唐到判环都判错了的,最后写了拓扑才过。
3.23
改 P1084 最后一步贪心错了,调了 1 天。
首先要求最大值最小化,容易想到是二分答案。
二分一个 \(mid\) 表示要求在总移动最大值 \(\le mid\) 的情况下是否满足要求。
先判断哪些军队在时间 \(mid\) 内能冲到根的儿子,再用 DFS 标出哪些根儿子子树已经被内部军队封住,最后按“最小自留、本地优先、剩余时间大的去补外部缺口”做贪心即可。
似乎这个图论专题写了一个多月了还没写完。
3.24
【数据删除】
3.25
挑战一波 P5633 & UVA1537,然后成功挑战失败。
我们发现这两道题是类似的,都是在要求根节点的度数 \(\le\) 或 \(= k\)。
对于这一点,我们可以考虑先在与根节点有连边的子树内先跑一遍最小生成树,然后考虑能与根连边的点与根节点之间是否连边。
对此,可以先连上处理好的森林的根与根节点的边,然后考虑每个森林内部能与根连边的点与根连边的长度与原来森林里最长的边的长度,答案减去原长,加上新长即可。
3.26
学了一下权值二分,做了 P2619。
说实话,这个算法是有点玄学的,对于此算法,主要形式就是要满足一个限制条件(最多/最少/恰好要满足选择 \(p\) 个值),同时还需定义 \(f_i\) 表示在每一个点连接时需付出 \(k\) 的代价时,选择 \(i\) 个值的最大/小值(也可以理解为枚举一个斜率 \(k\),选择 \(i\) 个值的最大/小截距)。
我们构造此类图像的目的就是为了使 \(p\) 作为某一种的 \(k\) 为代价时的最优点(即凸顶),这样会发现 \(f_k\) 的值是可以很快求出来的,这一般只需贪心、DP 等亦或是其他题目需要的算法。
又因为这个算法是以根据图像做切线时的截距大小为核心的,所以需要考虑对于 \(\Delta f_i\) 具有单调性,即这时候就要求 \(f_i\) 的函数图像是一个凸包。
对于 P2619,这里需要满足白色的边的数量要恰好为 \(k\)。
这里发现对于在原先跑出来的最小生成树一定是最小的,而往它内部加边或者删边对它增加的值一定单调上升。
这满足了 \(\Delta f_i\) 有单调性,所以可以考虑权值二分,中间的 check 函数只需跑一遍最小生成树即可。
通过 600 祭。
3.27
【数据删除】
3.28
刚写的日志被【数据删除】了,这个故事提醒我们写一段保存一段。
早上过来依旧专题起手,看了看 P10953,似乎需要处理一下边双,但我好像忘了,上 oi-wiki 看会儿。
发现对于同一个边双里的点,答案就是 0,而对于不同边双里的两个点,答案就是 \(dis_u + dis_v -2 \times dis_{lca(u,v)}\)。
3.30
改了一天的题,直接【数据删除】。
3.31
把 3.29 的晚练给改了,把 CF2211C2 的题解 给交了上去,为什么除了我以外的题解全是 DSU 啊,这不是一个简单的模拟黄题吗?
依旧改题,【数据删除】。
April
4.1
尝试一下 P4819 发现这题似乎缩个点统计一下入度就完了,然后获得了 30pts。
仔细思考后(事实上是翻了翻讨论区),发现一组这样的 hack:
4 3
1 2
3 2
3 4
我们发现最后是不用找 \(1\) 号点的,处理一下即可,这哪来的紫。
4.2
早上被拉去 Test JDScript0117 出的 CF div 1+2 然后被 C 创飞了(虽然最后还是切了,但没时间写 D 了)。
下午过来先写了 P2860 又是唐题,又是边双。
我们只需处理出边双缩点之后的叶子结点的数量 \(x\),答案就是 \(\lceil \frac {x} {2} \rceil\),注意处理一下重边即可。
又写了一下 P10947,一个挺板的最短路计数和严格次短路,一个 dij 解决。
4.7
写了一天的 DSU,啥权值 DSU ,扩展域 DSU 快吐了。
接着来试试 P10463 发现这似乎需要用到辗转相除法,翻了翻蓝书才知道 \(\gcd x,y,z\) 就等于 \(\gcd x,y-x,z-y\) 这提示我们可以使用差分来实现一个区间查,单点修的线段树,维护 \((l,r)\) 内的 \(\gcd\) 的大小,最后查询时只需输出 \(\gcd a_l,query(l+1,r)\) 即可,仍需拿一个树状数组维护一下每个数的值即可。
4.8-4.13
【数据删除】
4.14
昨晚打了 CF2220 差点掉惨,最后 12 秒切 D1、D2,B 没写出来。
早上过来先把晚练总结补上,再写了 CF2220D2 的题解(后来删了)。
4.15
早上过来先把 CF2220E/CF2219C 用贪心写了,然后写了 题解。
下午开始刷专题,先把 P10590 & CF198E 给写了。
这两道题最开始想了一种要用线段树 + 树状数组维护的一个东西,打一半的时候发现,数据比较小,可以用分块解决。
发现这道题其实是个二维偏序的题,最后转化为求满足 \(len_i \le r_x\) 且 \(w_i \le p_x\) 的所有未访问值,加入到队列中。
对于这,我们考虑先对每个点按照 \(w_i\) 从大往小排序,然后分块,在每个块的内部再按照 \(len_i\) 排序即可,剩下的就很板了。
4.16
早上复习了一下联通分量,太久没写容易忘掉(主要是点双),又切了板子,用 struct 封装一下。
下午补一下图论剩余的题(其实只有两道),但还是留下了一道圆方树,但把 P3533 给切了。
我们发现这很明显是一颗内向基环树,考虑先用拓扑求出环的位置,视每个环上的的点为根,形成一个森林。
发现查询的点如果在同一颗树内,这就是个 lca 的板子,这里不做讨论。
如果这两个点不在同一个联通分量里,那直接用并查集判掉就好;如果在,先让他们跳到各自的根,预处理出这个环上的顺序,考虑一下是从 \(x\) 到 \(y\) 还是从 \(y\) 到 \(x\) 即可。
有理由怀疑这个出题人不想写 SPJ 才给的这么多约束条件。
你谷终于上题了,把 CF2220E/CF2219C 题解 扔了上去,为什么有人认为这题评紫啊,不理解。
4.17
【数据删除】
4.18
上午来接着刷专题,先做了 P1494,莫队的板子,简单维护一下发现答案的统计是显然的,用新的值减去旧的值即可,再写个 gcd 就完了。
4.19-4.22
【数据删除】
4.23
晚练犯唐,看到 1 月犯了 2 个唐氏错误,2、3 月犯了 2 个唐氏错误,4 月还没结束就犯了 5 个唐氏错误就有一种无力的绝望感。
一个 P10687 卡我一下午。
比较容易想到可以用并查集维护与位置 \(i\) 相同以及不同的点,混合下来就是个背包,记录转移路径即可。
4.24-4.27
改题 ing
4.28
模拟赛和晚练都还没改完,发现 T3 似乎需要根号分治,学习一下。
这个算法似乎有点暴力,对于数据结构的部分更像是暴力中选优,而其他部分更容易考虑互不相干的两个点(或区间)分别进行操作(有点像折半搜索的思路)。
有点暴力,但复杂度降得很快,但是需要找到平衡点,不然后续总处理时的复杂度只会更高。
对于数据结构的例题,可以思考 CF797E。
考虑两种暴力:
- 直接在询问中计算
复杂度 \(O(\frac {n} {k} \times q)\)
- 预处理每一个 \(p,k\)
复杂度 \(O(n^2)\)
发现对于 \(k \ge \sqrt{n}\) 的部分第一种暴力很快,复杂度来到 \(O(n \sqrt{n})\),那可以考虑预处理 \(k \le \sqrt{n}\) 的情况,二者结合即可通过。
4.29
早上过来先把昨晚的 CF2226D 给改了 mx -> mxl,6。
把这题的题解写了。
写一下专题吧,先开 P2894。
一眼的思路是考虑维护区间左边的空白,右边的空白和总的最长空白。
用线段树维护即可。
4.30
MD,模拟赛打成一坨,T1 晚练原题结果数组太多、太大直接 -100pts,T4 把异或看成加法了,再 -10pts。
咋说,赛时不仔细还是压根不会?
本来 rk 8 现在前十都有问题,T2 瞬切,结果写了 2 小时的 T4 伪做法,哎难绷。
或许我这就是我的真实实力?之前 6 场比赛全是运气好?
家长老师都说坚信我可以更上一步,不应该止步于此,想要更上一步就得拿出水平来,现在在我面前叫的人迟早要被扔下去,但哪来的底气呢。
黑夜是光明的伏笔,更何况还有星星
May
5.1
坚持写日记。
处理一下比赛估值。
考虑处理模拟赛 T1。
明晚有一场 ABC 只打 EFG。
解决模拟赛 T1,但还是被卡常了。
对这世界都充满厌恶
我不再相信任何人对我的眷顾
我不停努力因为我没有天赋
如果我没成功我就没有脸哭
我为了我的梦想为了我的前途
为了我的未来压下我的全部
尽管这一路有很多艰难险阻
他们想要打倒我但我很坚固
5.2
帮 PLH 改模拟赛 T1。
验 PLOI Round 2 的题目,被 T2 卡了?
下午写了一下 P4135,分块,调半天。
考虑定义 \(f_{i,j}\) 表示对于区间 \(1\) 到 \(i\),考虑数 \(j\) 出现了多少次。
在定义 \(g_{i,j}\) 表示对于分块后的区间 \(i\) 到 \(j\) 有多少个出现为偶数的数。
对于 \(f_{i,j}\) 和 \(g_{i,j}\) 预处理即可。
So come on and love me like you did before
Tell me I'm worth fightin' for
Show me that there's somethin' more
We can do better
Brick by brick, we built these walls
But tonight, we'll watch them fall, so
Love me like you did before
5.3
早上起来先被我妈压力。
下午打了一下梦熊的比赛,打完前三题发现不会 T4 就跑了。
明天开学啊。
Good morning and good night
I'll wake up at twilight
It's gonna be alright
We don't even have to try
It's always a good time
5.4
早上过来先看榜,学了一下 CDQ 分治结果没过板子?
思考一下发现好像值域取错了,但还是错。
有可能有重复的数,这要单独处理,改改就 A 了。
下午改一下模拟赛的 T3,似乎小常数的 set 就可以过?
但因为忘记 lt-- 调了半个下午。
似乎在 Github 上找到了个不得了的文件资源管理器,挺好用的。
In the faded light you touch my body
I can feel your hands on my skin
Think you got me right where you want me
But you're just in my way
I came to party on my own
Don't need nobody in my zone
I get down to the beat I lose control
5.5
坚持写日记!
写了一早上的 P4390,思路不难想,结果因为 while -> if 调了一上午。
考虑计算答案的过程,发现这是一个二位前缀和,这提示我们可以考虑对于前缀和的每一部分分开考虑(令 \((x,y)\) 为所查矩形的左下角,\((xl,yl)\) 为右上角),即分别处理出 \((x-1,y-1) \ (xl,yl) \ (x-1,yl) \ (xl,y-1)\) 这几个点的二维前缀和。
这题目第一眼似乎是个二维偏序,但它有个隐含的第三位即时间。
我们可以按照时间排序,对于每一次的分治内部考虑按照横坐标排序,最后把纵坐标的处理归到树状数组上即可。
写了一下午的水题?
5.6
似乎没有记录?
早上一直再改晚练,下午又在打 CF。
能涨就是赢。
5.7
改了一天的晚练,但还是 T 了啊。
难绷。
5.8
早上过来先改了昨晚的晚练,写了篇题解。
下午帮 PLH 验了一下 T2 的备用题,最后在我的强烈要求下改成了正式的。
似乎 T4 出了一堆 NP-Hard?
征集 T4。
5.9
似乎又是改了一上午的晚练,下午打 CWCPC R1 结果因为没吃午饭差点低血糖,似乎只切了绿及以下?
5.10
考试前一天才通知考试是猎奇的。
出师表都还没背啊!
5.11
早上过来先把 P1463 给写了。
总的来说这就是个找规律的问题,发现对于反素数,一定是由多个素数组合起来的。
这提示我们可以考虑处理出每个质因数单独的贡献,对于相同的贡献,取最小即可。
哦,语文书放家里了,没救了。
下午考语文,哎。
似乎 PLH 出了一个不得了的 T4,思考方向挺多但似乎只有一种是对的?
把样例和题面完善了一下。
基本上模拟赛的题都出好了。
5.12
坚持写日记!
早上过来先把 P2158 给写了。
猜了个结论令发现我们对半看后发现除了 \((1,0) \ (0,1) \ (1,1)\) 其他的 \(x \ge y\) 的点都满足 \(\gcd(x,y) = 1\),剩下的就是欧拉函数了。
但我不会,所以现学了一遍。
马上考英语,哎。
英语炸了,似乎是 100 \(\pm\) 5。
下午先写 P1082 似乎要用 exgcd 先学一下,写了这道板子。
似乎都杀进前 150 了?
对应的是 P10496 & AT_abc222_g。
首先转化一下式子:
发现对于最小的 \(x\),一定满足 \(x | \phi (\frac {9 \times L} {8})\) 考虑处理因数以及快速幂即可。
快速幂要开 i128。
语文不要挂!
5.13
语文 109,英语 100.5
最炸的是英语,阅读 + 听力扣了 24.5 分,语法 + 首字母扣了 21,时间不够导致的。
语文本来可以 118 的,但默写 -4,弱智选择题 -3,课内翻译 -1,错别字 -1。
起码上 200 了。
5.14
似乎改了一早上的晚练。
下午过来先把晚练的双倍经验:P7302 写了。
和晚练没多大区别,但需注意 \(w \le 10^8\),考虑每个点即可。
学了一下区间筛,做了一下 UVA 10140 结果半天交不上去?
因为 \(r - l + 1 \le 10^6\),考虑处理出 \(\sqrt {r}\) 内的所有质数,考虑处理 \([l,r]\) 内所有合数即可。
在爱的世界你好像还没弄懂
所以在花花世界应该把真心清空
游走于谎言之中构建起来的朦胧
却像是美得不可方物 还略带风度
当眼神开始放逐 冷漠略显无辜
言不由衷在乎 伤的体无完肤
选择放下全部 走不出的迷雾
对不起 是我作茧自缚
5.15
又改了一早上的晚练。
下午先把晚练写了,然后学了下 CRT,这是板子:P1495,下面记 \(a_i\) 为模数,\(b_i\) 为余数。
- 考虑先找到 \(a_i\) 的最小公倍数,因为 \(a_i\) 两两之间互质,所以可以直接乘起来,记为 \(num\)。
- 考虑处理出 \(f_i\) 表示 \(num\) 是 \(a_i\) 的多少倍。
- 计算 \(f_i\) 在 \(a_i\) 下的逆元记为 \(k_i\)。
- 答案即是 \(\sum ^{n} _{i=1} f_i \times b_i \times k_i \pmod {num}\)
然后封装了一下,但原题似乎要开 __int128。
想学 ExCRT,但似乎并没有学会?
5.16
早上过来先把专题中最后一道水题:P10500 给写了。
发现这是个伪期望问题,考虑计算所有序列的权值和。
因为这是位运算,经典的,考虑按位处理。
对于或运算,考虑每一位 \(j\) 上一个出现的位置在哪,从而前面的到当前这个点都是合法的。
对于与运算,考虑每一位 \(j\) 上一个连续出现的位置在哪,从而这个长度所包含的点合法。
对于异或运算,考虑每一位 \(j\) 为 \(0/1\) 的个数,每次转移即可。
再考虑 P4035。
发现这题列下来的式子是形如:
其中只有 \(b\) 和 \(b_x\) 是常数。
再次考虑发现似乎可以把该式和下一个式子相减,这样就是个多元一次方程组,高斯消元即可。
模拟赛又打砸了,放学时看到考直升的考完,明天放假了。
或许我就该待在这,这就已是我的极限了吧。
好多事啊,英语、语文、数学、信息,这似乎填满了,但又似乎只是我在偷懒。
我真的累了,语文英语考炸,晚练模拟赛又炸,啥啥干不好。
当天神不站在你这边时,就拿实力说话。
Close your eyes find the paradise.
5.17
CF 涨分就是赢。
5.18
又改了一天的题。
下午把昨天晚练的题解交了。
5.19
似乎没有记录?
PLH 终于出出来了 T4,能出公开赛了,造了一下午的数据。
5.20
早上一直在改晚练,下午又在写 T4 题解,似乎证明有点复杂(PLH 说要考虑群论 + 矩阵 + 数学 + Ad_hoc),但用更简洁的语言描述了一遍做法,似乎简单一些?
准备申请!
5.21
早上似乎处理了一下模拟赛,好像 T2 有原,换了道 DS 当 T3,原来的就放 T2 了。
下午过来先把 exCRT 学了,主要就是如何将标准统一,即如何把两个同余式子换为一个式子。
封装了一下。
把公开赛申上去了。
5.22
晚上打 CF,可惜卡在了 1895,啥时候能上 CM 啊!
思虑再三后还是用回了 CLion,可能和它更熟悉,字体看起来更舒服吧。
5.23
CF 回滚上 CM!
你说 ACM 砸了?没事,没 CM 重要。
话说似乎 3 个月没回滚了。
早上先写了 P10499,是个不错的高消。
考虑对于点 \(i\) 考虑选择哪些按钮选择之后会影响它,然后考虑列出一个异或方程高斯消元即可。
5.24/5.25
没啥总结的,准备会考去了。
5.26
早上考完会考,但愿能及格。
下午过来先做了 CF451E,似乎是个简单的容斥+计数。
考虑列出容斥式子:
其中 \(\sum a_i\) 表示选出来的 \(p\) 个数的数量和。
发现 \(m\) 很大,但 \(n\) 很小,考虑二进制枚举,然后用普通的计算方式计算出答案即可。
5.27
依旧改一早上的晚练。
下午先给小六的讲了讲一场人均 300+ 的模拟赛,似乎他们没听懂 T4?
下午回来先写了 P2568。
依旧推式子,考虑从素数下手,答案就是:
最后推出:
用线性筛 \(O(n)\) 求欧拉函数即可。
SCCPC 考试用 Ubuntu 是猎奇的,我到现在还不会用。
5.28
似乎改了 3/4 天的晚练。
中午方老说有人把【学校名称】举报了?但不是我们班的,因为举报的和她讲的不一样?
把之前欠下的晚练补上了(我好 Tang 用并查集优化一下就可以了)。
不想写题了,这似乎是 14 岁最后一天待在机房了,写一写这一年的收获吧:
- CF 紫名
这似乎是意外之喜,谁也没想到能在 14 岁最后一场 CF 上紫,也是 16 班第一个目前也是唯一一个紫名。
- 洛谷通过数 700
这是今天改完晚练后发现的,转眼间都 700 道了。
- vjudge 全网排名 123,通过数 1367
这没啥好说的,大部分都是重复的题,没啥含金量。
- CSP-S 2025 176
这个就有点可惜了,本来可以 200+ 的。
- NOIP 2025 132
这个最可惜,要是再多打点就有一等了。
- 联合省选 2026 初中生 40 位
这个是难绷的,Day 1 T1 炸了 64pts 还在 rk 40。
似乎整个 14 岁的寒暑假全在培训?暑假号家军,寒假梦熊。
梦熊的比赛一场比一场烂,考过倒数,也考过 rk 6,反正挺神奇的。
和 PLH 出了一套题,但还没想好投到哪儿。
看着晚练和日记越写越长,挺有成就感的。
初中 3 年过得真快啊,马上就是高中生了,这 3 年过得挺传奇的,从年级 300+ 到 30,最后到了竞赛班,有了编制,又在一次次的跌倒中爬起来(刚进竞赛班排倒数 5 名,后来期末又回到了前十,但这两个学期心思全在信竞上,又跌回了中游),这本身就是一种勇气,青春最黄金的 6 年我给了信竞,但愿我不会后悔。
有人(忘了谁说的,可能是 C 老?)说要懂得感恩,那感恩的人就多了,感恩 C 老,给我机会让我来到了现在这个位置,感恩我妈,没有她的那通电话就没有我的现在,感恩我爸,和我妈一起支持我,感恩我奶奶,照顾我照顾了 14 年……
最后要感谢我自己,把自己推到了现在,在每次绝望时愿意自封所有电子产品,决战到最后一刻。
咋感觉有股写回忆录的味道?
打一辈子 OI!——【】
既然走到了现在,又何必回头,走下去吧,既是自己选的路跪着也得走完。
June
6.11
从 5.31 到 6.9 号军训,似乎 5.31 的 SCCPC 打了个 Ag?
这几天在苏州玩,结果告诉我今晚返校?
15 岁生快(虽然晚了)。
6.12
开始复建,但后天似乎就是 CQCPC?
晚练发现排序排反了 - ? pts。
6.13
下午又是 CWCPC,和 PLH 打了个 rk 4,M 唐题没写出来是 hyw。
I 题用线段树暴做,结果可以做到线性?
似乎有 4 道题(EPLH)在封榜之后才写出来?
晚自习这个看守的女老师属实是有点猎奇。
如此状态如何 CQCPC。
晚上和我妈又吵了一架,似乎每次到最后都是我的错啊,也不知她意识到自己的问题没有(骂我价值观有问题的来了,哎)。
然而世事千帆而过 路的尽头终归是温柔和月光
6.14
打 CQCPC,详见游记。
早上 5:00,晚上 9:30,累死了。
6.15
上午学校断网,所以把游记和 CQCPC 的 F 的题解写了。
下午过来先说要考试?结果网好了就去上体育课去了。
过来把游记交了。
晚练概率求错了 -100pts(悲)。
6.16
上午似乎一直在死调 P16905,一直没调出来。
下午和 CQBZ 打模拟赛 rk 4。
T1 \(O(mq)\) 能过 100pts?
T3 80pts 的送分为何一群人没要?神秘。
简单题 T2 不会。
6.17
又考炸了,这次倒数 rk 2,T1 打了 3.5h,结果标记错位置了,挂成 30pts,T2 T3 只打了最基本的部分分,结果 T3 还挂了 -30pts,T4 压根没开,结果告诉我最好拿分?
又要等着回家被骂了,似乎我总会让人失望。
午觉没睡 + 晚饭没吃 + 模拟赛爆炸。
似乎所有人都希望你失败啊,但偏偏你最不争气。
6.18
【数据删除】
6.19
冷静,冷静,冷静。
我冷静 NM,你 TM 懂个 P,天天就知道翻人的黑历史,学 NM 的竞赛。
下辈子别打 OI 了,心如死灰。
我试着把孤独藏进耳机。
6.20
有些 AI 哥叫麻了,想上 CM 想疯了吗,一回来就叫,脑子呢?
D 题 tourist 用时 18min,AI 哥用时 9min,E 题前面函数间不换行,后面又换行了,满满的 AI,前一天写 map<int,vector<int>>,昨天写 map<int, set<int> >,今天写 map<int,map<int>>,叫麻了。
这图到是挺适合他:

6.21
上午还是在改晚练,想了想 攀登 6 的 T3 的根号做法,想着想着突然发现会 \(O(n \log n)\) 了,结果常数似乎有点大,反正有 4s。
现在考虑动态维护“连环打”的情况,考虑按照 \(b_i\) 的值域建线段树,需要维护区间 \(\max a_i\),区间怪兽个数以及区间最大怪兽防御力为 \(b_x\) 时可以找到的最小 \(b_mn\)。
考虑最后一个的维护。
合并的时候考虑以下三种情况:
-
\(a_{i,ls} \le a_{i,rs}\) 右儿子没什么用,可以直接继承自左儿子;
-
\(a_{i,ls} \le b_{mn,rs}\) 左儿子没什么用(接不上),可以直接继承自右儿子;
-
其他情况:左右儿子能接上,所以 \(b_mn = b_{mn,ls} \ a_i = a_{i,rs}\)。
拿 multiset 维护防御力为 \(b_i\) 时的 \(a_i\) 的最大值和个数即可。
如果对于 \(a_i \ b_i\) 离散化复杂度就是 \(O(n \log n)\),也可以动态开点但常数更大复杂度更劣(\(O(n \log V)\))空间还更大。
话说我的 DS 咋这么烂。
6.22
早上 + 下午第二节一直在调 攀登 7 的 T4,依旧数据结构,我的 DS 还是太烂了。
后来想了想 P1573 是个四柱汉诺塔问题,似乎论文中证明了 1941 年的一种实现方式似乎在四柱是对的,但五柱及以上就没有证明了。
其实思路很简单,第一个柱子是起始点,第二个是缓冲点,第三个是缓冲点的缓冲点,第四个是目标点,当块到第二个点时就像处理三柱汉诺塔一样处理即可。
考虑找规律可以做到 \(O(\sqrt n)\),但似乎还有一种 \(O(e^{\sqrt {2n} \ln 2 + \frac {1} {2} \ln n})\) 的做法但似乎没必要啊。
6.23
上午和 28 班踢球,调控进了一颗,结果还是 1 : 4 薄杀了。
下午和上午一直在研究 攀登 7 的 T2,最后还是找 PLH 讲了后在明白。
但他的代码似乎和题解没多大区别。
AI 哥演都不演了,9min 切紫的来了(这题想了半个下午还是没思路,似乎是个找规律?不知 AI 哥如何在 9min 解出来的)。


记录在案,后面再发。
晚练考成 eps pts,脑子空转了 2h。
6.24
早上起来发现葡萄牙 5 : 0 吓哭了(罗哥似乎梅开二度),英格兰 0 : 0 是 hyw。
依旧改晚练,但 \(T = 2\) 的情况还要再研究一下。
似乎晚练改了一天?
很想飞到远方,但是有希望吗?代价又是什么?
6.25
早上依旧先改晚练,但似乎较简单?
得知了周五放学的消息(难得的双休)。
居然能有时间写专题了?!
下午过来把 P2303 给切了。
依旧推式子,按照式子展开:
显然的,枚举 \(n\) 的因数然后分解质因数计算即可。
再写了写 P1516,神秘题目,考虑将题目转化为求:
的 \(k\) 的最小解,这个有很多种解法(ExCRT,Exgcd),这里考虑欧拉函数。
将式子转化一下:
直接分解质因数求 \(\varphi(L)\) 即可,但只有 80pts,原因是 \((m - n) ^ {\varphi(L) - 1}\) 计算时必须满足 \((m - n)\) 与 \(L\) 互质,最后模一个 \(\frac {L} {\gcd(m - n,L)}\)。
考虑定义 \(f_{i,j,k}\) 表示当进行到第 \(i\) 轮时,总共赢了 \(j\) 场,且背包剩余容量为 \(k\) 的概率。
因为最多只会用 \(n\) 个背包容量,所以考虑对于所有值 \(\ge n\) 的容量全把值赋为 \(n\),这样就有一个 \(O(n^3)\) 的做法,考虑用记忆化搜索实现。
人人都说,见过花开就好,管它花落谁家;可我见过花开,又怎甘心它花落别家。
6.26
把日记的公开关了,内心有点奔溃。
咋每次回到家都感觉笑不起来呢,好累啊,干啥啥不行,信竞信竞不行,文化课文化课不行,足球足球不行,总让人失望,似乎全世界都盼望着你的失败,可似乎你就只能失败。
家是人生的驿站,是心灵的归宿,也是生命力量的源泉,但我内心只有莫名的难受。
我有时候是利己主义,有时候是利他主义,但我始终是完美主义。
是长久的压力引发的,也有可能是自己太过极致的完美主义,我,好像大哭一场啊。
迟来的阳光救不了枯萎的玫瑰,迟来的关心救不了破碎的心。
6.27-6.28
打了场 CF,结果 AI 哥发力给我干下紫名。
6.29
晚练昨晚就改了,今天又开始写专题。
先写了 P2485,对于前两种操作似乎没啥难度,考虑第三种操作。
这里用大步小步算法(BSGS),考虑分块处理,因为 \(x\) 的周期一定是 \(\varphi(p)\) 的,考虑先用 map 统计在 \([1,\sqrt {p}]\) 范围内的 \(y\) 的幂与 \(z\) 相乘后的值,然后可以将 \(x\) 写为形如 \(k \times \sqrt{p} - b\) 的形式,考虑按块枚举最后处理一下最后一个块即可。
把 P10502 给过了,并把矩阵运算给封装了。
发现考虑矩阵分割法,发现有以下运算:
矩阵快速幂即可。
把文章开成公开的了。
下午又来写了写 P10503,依旧矩乘快速幂。
考虑通过第 \(i\) 列向第 \(i+1\) 列转移,因为第 \(i+1\) 列第一行的值是第 \(i\) 列的值 \(\times 10 + 3\) 所得,考虑写出矩阵:
考虑 \(j\) 行的转移(\(j \ge 2\)),发现剩下行都可以由第 \(i\) 列的前 \(j\) 行的值的和转移而来,完善矩阵:
最后用 \(\begin {bmatrix} 1 & 233 & a_{1,0} & a_{2,0} & ... & a_{n,0} \end {bmatrix}\) 去和快速幂后的矩阵相乘即可。
パッと花火が 夜に咲いた 夜に咲いて 静かに消えた。
6.30
依旧改晚练改了 3/4 天。
最后写了写之前就会的 P7115,究极大模拟来的。
考虑分治,考虑把 \([l,r]\) 之间的值左半部分的值都 \(\le mid\),右半部分的值都 \(> mid\),可以把这个区间内的数视作 0/1,要求左半部分都是 0,右半部分都是 1。
考虑如何处理,发现这似乎是个双指针的行为,分别记录对于点 \(i\) 上有 \(s\) 个 1,考虑将 \(j\) 上的前 \(s\) 个放到 \(n+1\) 上面,考虑将 \(i\) 的底部尽量变为 0,将 \(j\) 的底部尽量变为 1,这个中间的变换是简单的,但要注意细节。
累了,睡了。
変わらないで いられるのは 今だけか?
July
7.1
七月了啊。
想了一下午的 AT_arc159_f 结果想了个用 set + CDQ 分治的满级做法,但是 \(O(n \log ^3 n)\) 的,计算器一算 \(8 \times 10^9\) 还有大常数。
7.2
又是一早上在改晚练,结果发现做法伪了被迫学习正解。
听 WWX 讲了讲整体二分,把板子给写了。
总体来说思路挺简单的,考虑通过二分值域处理查询。
具体的,考虑处理区间 \([l,r]\) 表示对于询问序列 \(Q\) 里面的所有答案均在 \([l,r]\) 范围内,考虑通过树状数组等来实现分区处理,复杂度一般是 \(O(n \log ^2 n)\)。
未来的某一天,我会像此刻怀念童年一样,怀念现在这个正在写这段话的、有点疲惫却依然天真的自己。
7.3
晚练似乎不太好写,又是大力分讨,调不出来决定直接重构。
只感觉回家好累,还是想待学校。
回家没开手机,但我知道,我妈还是会觉得我只会在玩儿,累。
一切终究是昙花一现罢了。
我看着你背影,想开口,那勇气却和时间偷偷溜走。
7.4
【数据删除】
7.5
模拟赛。
话说 T3 没判根最后合并的情况居然能过 n <= 10。
rk 5,100 + 100 + 40 + 10,大众分来的。
赛后发现似乎 T3 不需要排序,再预处理一下前后缀就能少一只 \(\log\)。
明天考语文,后天考英语,明晚还要打 CF(但为何双牙对决 3:00 开始啊)。
生きてるだけで痛いんですよ。
7.6
考语文.png
晚上要打 CF?!
低血糖了。
MD,语文错了 5 个选择。
肚子疼。
偏偏你最不争气。
一直在追 追到前面就好了
可万一前面 什么都没有呢
7.7
CF 炸惨了,MD,快读和 cin 不能混用?!
恭送总裁(悲)。
考英语.png
语文出成绩了?104 败在了选择。
英语炸到不及格,败在了阅读和语法还有字词。
晚上让 CDO 讲了下重链剖分,似乎有点意思。
相逢已是上上签,何须相思入流年。
7.8
早上先把做完没写完的板子给过了,但 Loj 上要换根,没太想好咋做。
我们发现在树上似乎不太好解决,但在链上就容易很多。
考虑如何将问题简单化。
对于每个点记录 \(i\) 的儿子中子树最大的一个(记为 \(son_i\),称作重儿子),使得 \(son_i\) 和 \(i\) 在一条链上,这样做的好处是对于任意一点 \(i\) 到达根节点最多经过 \(\log n\) 条链,因为非重儿子的字数大小不可能超过子树总大小的 \(\frac {1} {2}\)。
发现树可以通过先遍历重儿子在遍历其他儿子所得到的 dfn 序列似乎就转化成了线段问题,考虑数据结构维护即可。
让 PLH 讲了一下专题。
做了 P4301,线性基板子,考虑从大往小按位加入即可。
又做了 P10507,似乎是个阶梯 Nim 游戏。
考虑转化题面,还是拿石子,但石子只能移动到前一个堆(第 0 堆试作出局),考虑先手必胜态。
发现似乎只用试作考虑奇数的 Nim 游戏,因为当移动偶数值来使我是必胜态时,只需移动相同的出去就可以了。
找 C 老谈话(你没看错),讲了讲信竞学习的一些建议:
- 心态要好,善于上厕所(绷)。
- 听课时有点吃力时那本子记录一下算到哪了。
- 一般前 2.5h 就已经把所有能打的都打了,后续即便想出来了或许也没检查更优。
- 倡导一题多解,增加深度,锻炼思维链的长度以及发散性。
- 相信自己。
事实上还谈了谈【数据删除】,我还【数据删除】,但心情好了很多。
让 CDO 讲了讲模拟赛的 T4。
我已经千疮百孔
你依然无动于衷
就这样任我被回忆捉弄
7.9
现在是凌晨 0:20,我在床上写下了这段话。
我并不打算告诉母亲下午和 C 老聊的关于我家的是,可她好奇心过强,非要知道发生啥了,我不说又说跟我说话是在找气受,我又有点崩溃了,把她电话挂了,和我爸打过去,一遍笑一遍哭一遍吼。
我真的受不了了,和她认真聊问题,却总会被骂,不说难受的又只是我,gpt 问我最想告诉她啥,我写的是:
我想说:对于这种有点病态的控制欲,我真的感到太累了。
它帮我总结了一下我真正想表达的东西:
我知道你关心我,但当你反复追问、检查我的东西、不断提醒我的失败时,我感受到的不是帮助,而是压力。我现在真的很累,需要一点自己的空间。
我真的累了,但还是失眠。
头晕但清醒。
原来人在崩溃时真的会又哭又笑又吼啊。
大概 2:00 左右睡着的。
早上过来把昨天 CDO 讲的 T4 给写了。
又和 PLH 写了 P10506 考虑记忆化搜索 SG 函数按照题目要求来做实现即可。
落花终有意,流水却无情。
7.10 - 7.12
【数据删除】
梦熊集训(7.13 - 8.1)
7.13(Day 1)
早上是讲可持久化数据结构,似乎可持久化平衡树与可持久化并查集似乎没多大用处。
一共写了 4 道题,PLH 写了 11 道(7 紫 1 蓝 1 绿 1 *2200 1 *2400)?
发现对于一个序列的 mex,一定是第一个满足 \(x > 1 + \sum _{j = 1} ^{n} a_j [a_j < x]\) 的第一个权值。
考虑建立一颗主席树,记录在不同状态下的每个权值的位置的变化,对于查询,每次验证 \(x\) 不是最小 mex 后考虑验证 \(x + 1 + \sum _{j = 1} ^{n} a_j [a_j < x]\) 即可,复杂度:\(O(n \log^2 n)\)。
首先显然的是对于 \([l,r]\) 之间的 \(a_i\) 最小的值去 \(l\) 次小的值去 \(l + 1\) 以此类推,发现肯定会找到一个点使得这个点以及比它小的其他点都是向后跑的,剩下的大于它的点是向左跑的,考虑线段树二分。
在计算过程中分别处理两边的情况即可。
最简单结果写的最久。
解法有很多,像 P4390 的 CDQ,或是离线二维数点。
考虑先将 \((x,y)\) 离散化,然后扔到主席树上按照 \(x\) 的大小离线维护即可。
考虑将题目转化一下,发现可以通过 priority_queue 实现为以 \(i\) 为起点的第 \(p\) 大的异或值是多少。
似乎可以用可持久化 Trie 来实现,但发现将 \(k\) 乘二后可以不考虑是起点还是终点,普通 0/1 Trie 即可。
少年没有乌托邦,心向远方自明朗。纵然人间无乐园,星辰大海皆可往。
7.14(Day 2)
一共写了 5 道,很大一部分时间是在学点分治。
板子。
点分治是一种用来解决树上路径大小权值问题的一种实现方式,有时可以介入数据结构来解决更多问题。
基本思想是 \(x\) 作为路径点上的 lca,计算出其子树内路径到它的距离即可。
但似乎有点暴力,考虑发现重复寻找树的重心可以将层数优化到 \(\log n\) 级别,这样复杂度就降下来了。
同时因为复杂度是由重心确定的,所以重心即为重要,这里按照 liu-cheng-ao blog 上的方式解决重心问题
点分治主要分为一下几个步骤:
- 找到联通树内的重心
- 计算这个联通树内的每个点到重心路径长度
- 考虑通过双指针处理出所需要的内容(即答案)
- 将这部分讨论出的路径放入双指针所处理的数组中
- 考虑按照以重心为根分割它的子树依次递归
上述复杂度大致可以做到 \(O(n \log^2 n)\)。
这个题也是板子。
考虑在双指针的过程中计算方式变换一下即可。
卡了半天的常数,结果是重心找错了(由此可见重心的重要性)。
发现要求边的个数尽量少,只需在处理和等于 \(k\) 时统计一下最少的边的个数即可。
这种方式最好的是不用容斥即可完成。
发现这题需要考虑树上二维偏序问题,发现两个单独都很好处理,合一起后发现似乎在更新答案时用树状数组更新即可。
记得处理没来得及查询的部分。
有思考过用动态点分治来解决问题,但发现似乎可以用括号序列的解决方法解决问题,这里记录 dfs 序同时记录进入以及退出子树的时间,在线段树上记录权值即可。
但当存在边权是还是只能用动态点分治。
在坚冰还覆盖着北海的时候,我看见了怒放的梅花。
7.15(Day 3)
今天是练思维题,把所有蓝及一下和一部分紫给切了。
思考发现可以枚举一个答案,将答案以后的炸弹记作 -1,\(\ge\) 答案的数记作 1,判断是否存在一个位置使得后缀和是 \(\le 0\) 的,存在则答案大了,否则就是答案小了或正合适。
发现随着炸弹的添加答案会依次减小,双指针处理即可。
考虑按照数组长度从大往小处理。
对于集合 \(x\) 如果以前的所有集合都没有重合的,记录数 \(i\) 上次被包含的集合为 \(bel_i\),那如果所有和这个集合有重合的集合大小的和 \(> sz_x\) 那说明至少存在一个集合和集合 \(x\) 满足要求,输出原编号即可。
考虑先手选择的先后条件。
发现当 \(a_1 + b_1 \ge a_2 + b_2\) 时选择一定更优。
当 \(a_1 > b_2\) 时一定先选最优。
当 \(b_1 > a_2\) 时一定先选最优。
以上是显然的,当然还存在不选择的情况,考虑对于第一种情况记录选择的点,考虑在最后通过排序正着解决问题。
因为存在映射关系,考虑建图解决问题。
具体的,考虑当前位置向当前位置上的值建边,发现 \(i\) 位置上的下一个值就是环上的下下个点。
发现对于奇环,直接处理即可,但偶环发现会分为两个大小相等的环,一个放奇数位上的一个放偶数位上的,考虑最后统一合并即可。
MXOJ 上不能多输出空格是猎奇的。
人们总是试图定义边界,用篱笆和铁网,用言语和目光。
7.16(Day 4)
依旧思维题训练,依旧只会切蓝。
考虑如何放更优。
发现如果设 \(k\) 表示答案,那还有 \(2 \times (n - k) - 1\) 条对角线没有被覆盖,由此给出了 \(k\) 的下线:\(\lceil \frac {2n - 1} {3} \rceil\)。
考虑答案,发现可以将位置划分一下,如(盗图来的):

如图,在左上角放长度分别为 \(n − k\) 和 \(n − k − 1\) 的对角线。
这样可能还会有剩余(因为你只放了 \(2n − 2k − 1 \le k\) 个皇后),在蓝色矩形的左上方加进去即可。
看了眼就会了?
考虑边双内部似乎不需要过多考虑,一条边过去一条边回来即可。
考虑缩完点后,发现原图变成了一个森林结构,这提示我们可以树上差分。
考虑记录 \(f_{i,0/1}\) 表示这个点和它的父亲所连的边是否要求向上/向下。
考虑在 \(x\) 和 \(y\)(缩完点后)的 lca 上标记一下再在这两点上标记一下即可。
神奇三进制题目。
考虑对于三进制情况下 \(2y\) 的每一位进行讨论。
发现对于 0 和 2 是凑不出来 1 的,而 0 和 1 是凑不出来 2 的,考虑对于 \(2y\) 的每一位变为 1/2,\(x\) 和 \(z\) 则都为 0 或 2/1。
考虑构造完之后如何处理和为 \(m\)。
假设我们的 \(sum\) 与 \(m\) 的差为 \(x\),整个序列如果同时加上或减去一个数,其性质仍然满足。
那么我们可以通过这一点将差 \(x\) 控制在 \(< n\) 内。我们将三进制位的最后一位留白(即最后一位不进行构造,留出来一个 0),然后选择任意 \(x\) 个数加上 1 即可,最后一位的改变并不会影响答案。
考虑将题目变换一下,对于要求 \(d(P_{A_1},P{B_1}) = d(P_{A_2},P_{B_2}) \dots = d(P_{A_{\frac {n \times (n-1)} {2}}},P_{B_{\frac {n \times (n-1)} {2}}})\)。
这种情况有一种通解:
初始情况所有点就像这样,考虑如何使答案变小。
发现对于 \(p_{i,i}\) 似乎不存在贡献,考虑:
发现当似乎当 \(p_{i,i}\) 足够大时原式子所产生的误差最小。
又发现主要差距在于 \(p_{i,j} + p_{j,i}\) 考虑记录 \(p_{i,j}\) 为其倒序查询位置即可满足要求。
纵使日薄西山,亦有晚霞满天。
7.17(Day 5)
今天动态规划,全是思维题(绷)。
第一眼似乎是个 \(O(n k^2)\)的,但考虑到每个点只会有一次合并操作,均摊下来就是 \(O(n k)\) 的。
话说 WYTZ 2024 年就把这题切了。
考虑将式子拆开,发现:
考虑对于每一个次方记录一下即可。
思路神了。
发现题目要求的是 \(\sum a_i ^2\),但似乎不好容斥以及计数,考虑讲题目转化。
我们发现方案数是好求的,考虑将题目转化成求方案数。
发现题目与两个人对这分别相同的管道拿珠子,考虑最后二者取出的序列相同的方案数。
可以列出状态 \(f_{i,j,k}\) 表示在第 \(i\) 轮取珠后第一个人从他所对应的第一条管道取了 \(j\) 个珠子,第二个人从他所对应的第一条管道取了 \(k\) 个珠子。
转移是显然的。
依旧 \(O(n k)\) 看作 \(O(n k^2)\)。
调了一上午。
考虑定义 \(f_{i,0/1.0/1}\) 表示对于第 \(i\) 个点,当前点是否安装监听设备,以及这个点是否被子树内的点监听了。
转移是显然的,但要考虑建立临时数组来辅助转移,以免出现猎奇现象。
定义 \(f_{i,j}\) 表示第 \(i\) 轮后,还剩下 \(j\) 个白球的方案数。
转移也挺显然,但是发现会算重。
原因是有可能一些相同的操作(即相同的颜色序列)被开始白球数不同的多种情况计算了多次。
考虑这里减去以 \(n - 1\) 设为 \(n\) 求方案数,我们把它理解为初始球数为 \(1 \sim n\),且每时每刻箱子里的白球都大于等于 1 个时的答案。也就是说我固定住一个白球在箱子里不动。
下午还打了场洛谷 rated,和 LZT 打的。
只有到了某个关键的时刻之后,你才会发现,“人生有梦,各自精彩”,其实并不是一句戏谑的嘲讽,不是一碗尴尬的鸡汤,更不是一声无奈的感叹,而是一句真真切切的真理。因为人生就是这样。每个人都有只属于自己的、独一无二的旅程。因此,我们只需要享受当下、享受 OI、享受比赛!
所以,我亲爱的朋友,趁还有机会,高傲地再飞一次吧!愿我们抵达路的末端时,都不会后悔。
7.18(Day 6)
今天学图论和网络流。
没太学懂啊,但会敲 Dinic 板子。
这里要注意的是图中的最小割就是最大流。
依旧板子。
考虑建立一个超级源点和超级汇点。
源点向第 \(i\) 个单位建立一个长为 \(r_i\) 的边,第 \(i\) 个餐桌向汇点建立一条长为 \(c_i\) 的边。
每个单位向每个餐桌分别建立一条长为 1 的边。
剩下跑 Dinic 即可。
发现 \(V\) 特别大,又发现相较于 \(V\),\(v_i\) 又特别小。
想到背包一直有个错误的贪心:按照性价比选择。
事实上在数值差异较大(例如这题)时,如此贪心选择答案会更接近正解。
考虑以性价比最高的物品的 \(v_i\) 建立同余最短路,考虑答案时取出同余方程的答案和性价比最高的所做出的贡献加在一起即可。
下午又打了一场 rated 差点被黄题单杀了。
晚上打 CF,AI 哥发力让我再掉分。
往日岁月已如隔世,再见之时,仍如初见时灿烂。
7.20(Day 7)
今天是模拟赛。
目前只会场切的 T1。
赛时写了 7k。
将题目转化一下:每次给定你一个区间,定义 \(l_i\) 为 \(\max \{ h_l,h_{l + 1} \dots h_i \}\),定义 \(r_i\) 为 \(\max \{ h_i,h_{i + 1} \dots h_r \}\) 对于区间的每个值 \(d_i\) 的定义为 \(\min (l_i,r_i) - h_i\),求 \(\sum d_i\)。
对于区间的处理,考虑用线段树解决。
具体的,考虑在每次输入后,通过线段树二分处理出所合并的区间,对于区间之后的值全部减一即可。
但原题支持 \(O(n\log^2 n)\),考虑二分 + 线段树即可。
考虑到 \(- h_i\) 的过程可以直接用前缀和处理,这里直接处理 \(\min (l_i,r_i)\)。
发现对于一个区间 \([l,r]\) 一定存在一个点 \(p\) 使得 \([l,p - 1]\) 中 \(l_i < r_i\),\([p + 1,r]\) 中 \(l_i > r_i\)。
思考后发现 \(p\) 正是区间最大值所在的点。
对于寻找这个点,依旧线段树解决即可。
考虑如何处理出 \([l,p - 1]\) 之间的 \(\sum l_i\),发现如果给定了 \(p\) 点就是一个前缀和问题。
考虑把 \(p - 1\) 离线下来,通过枚举 \(p\) 来依次处理。
考虑单个 \(p\) 如何处理,发现似乎通过单调栈维护上一个 \(\ge h_i\) 的位置,再拿一颗线段树维护区间赋值以及区间查询即可。
对于 \([p + 1,r]\) 的区间也是同理,倒过来操作即可。
对于以上的三颗线段树都可以融成一颗(避免 MLE)。
总体复杂度 \(O(n \log^2 n)\),如果求区间时用线段树二分可以做到 \(O(n \log n)\)。
纵使深陷密林,我仍能于枝繁叶密间,仰望漫天繁星。
7.21(Day 8)
哦,是串串,我没救啦。
ACAM 和 SAM 是什么东东,至今不会。
没啥好说的,依旧板子。
考虑对于所有的 border 建立一棵树(当然就是失配树),然后跑 LCA 即可。
记得不可以计算其中一个是另一个的前缀的情况。
考虑 Manacher。
似乎记录一下当前这个点当中心点所覆盖的范围的左端点以及右端点。
分别定义 \(l_i\) 表示以 \(i\) 结尾的最长回文串的长度,\(r_i\) 表示以 \(i\) 开头的最长回文串的长度。
转移这两个点即可。
发现将原串转化成 \(s_1,s_n,s_2,s_{n-1} \dots\),问题就和上一题一样了,只是需要判断答案左边是否在最开头。
还存在一种哈希做法,这里不再赘述。
哦,鞅的停时定理是什么,被 WYTZ 秒了。
定理不再赘述(我也不会)。
但答案根据公平游戏一定是 border 的次方和,对 \(10^4\) 取模即可。
清潇薄暮雨,半烛下莲舟。蝉鸣微月影,独赏醉难求。
7.22(Day 9)
已知今天的题全是在 CF 上交的。
B 班已经走了两个老师了,但 XJC 依旧还在,铁打 jucason_xu。
已严肃怀疑这个题是不是拿来凑数的,直接跑莫队就做完了。
又是一个凑数题。
考虑直接 Kruskal 重构树,已知 \(i\) 到 \(i - 1\) 的答案,同理可以求出 \(i + 1\) 到 \(i\) 的答案,这样我们处理出相邻两点的情况后用 st 表统计区间最大值即可。
好消息不是凑数的,坏消息,是 brute force。
发现第三种操作后的点的会分别位于区间两侧,然而修改后点就聚到一起了。
直接考虑用并查集维护,每次有区间就暴力修改,最后点总会聚在一起,考虑用 set 解决。
生命中所有的绚烂,原来终究,都要用寂寞来偿还。
7.23(Day 10)
神秘 DS trick,但我只会简单题咋办。
简单题。
转化一下题面,\(dep_x\) 可以视作求 \(x\) 的祖先数量。
发现可以将查询离线下来,对于区间 \([l,r]\) 的查询,可以视作区间 \([1,r]\) 减去区间 \([1,l - 1]\) 的查询。
考虑到对于新添加一个点,将它的祖先们的权值全部 +1,查询时查询 \(z\) 的祖先个数即可。
考虑树链剖分加上线段树的区间修改和区间查询即可。
考虑将题目转化一下,发现事实上要求 \(j < i\) 且 \(a_j > a_i\) 的答案,因为另一种情况同理,所以翻转一下即可。
考虑权值线段树处理出满足位置的最后一个 \(j\),发现既然想要利用上一个转移点 \(j'\) 那就必须满足 \(a_{j'} - a_i < a_j - a_i\),发现这样的点的数量是 \(\log V\) 级别的,考虑树状数组维护后缀最小值即可。
我常常追忆过去,直至未来已成过去。
7.24(Day 11)
贪心题单变成 DP,写着写着又变成思维题?
\(O(n^3)\) 的暴力 DP 是好想的,考虑如何优化成 \(O(n^2)\)。
发现,如果 \([l,r] \subset [L,R]\),但是 \(\operatorname {mex} [l,r] = \operatorname {mex} [L,R]\),那后者的转移是不优的。
发现对于所有的满足 \(\operatorname {mex} [l,r] \not = \operatorname {mex} [l + 1,r] \land \operatorname {mex} [l,r] \not = \operatorname {mex} [l,r + 1]\) 的位置个数不超过 \(O(n)\) 个。
这样就优化成 \(O(n^2)\) 了。
手玩一下数据可以发现,操作等价于将一棵树不断删点,直到每个连通块只有一个点,则剩下点的数量的最大值即为答案。特别的,如果一开始删的点是叶子,则答案要加一。
因此容易发现,如果一开始删的不是叶子,则答案就是整颗树的最大独立集,如果一开始删的是叶子,答案就是整颗树除去这个叶子后的树的最大独立集。很快我们就会发现,一开始删叶子是更优的,这是因为对于一开始删非叶子的情况,其答案是整颗树的最大独立集,如果最大独立集中有叶子,那么我们一开始先把这个叶子删了,答案只增不减;如果最大独立集没有叶子,则随便选一个叶子删了答案也只增不减。因此先删叶子更优,只要考虑先删叶子的情况。
因此我们需要求出树的最大独立集,并且允许最多一个叶子和其父亲同时被选择。我们用树形 DP 解决即可。
显然的是操作二和三没有任何意义,考虑将矩阵 \(a\) 转化为一个新矩阵 \(p\),使得 \(p_{i,j} = a_{i,j} \oplus a_{i + 1,j} \oplus a_{i,j + 1} \oplus a_{i + 1,j + 1}\)。
发现操作一会修改 \(p_{x,y}\),操作四会反转 \(p_{x - 1,y - 1},p_{x - 1,m},p_{n,y - 1},p_{n,m}\)。
发现操作四最多只进行一次,考虑操不操作,分两次统计即可。
显然的是考虑较大的和较大的连边,如果两个点连边之后使得某个连通块不会再有出边,或者连完之后出现了环,那么就是不能连的,否则就可以连。
具体的,用两个队列来维护。最终肯定是一棵树,也就是一个连通块,那么我们一个队列维护最终的连通块中,能连出去的 \(b_i\) 的值。另一个维护剩着的度数为 1 的连通块中还能连出去的 \(b_i\)。每次先和最终的连通块连边,然后把当前点加入最后连通块中,然后与度数为 1 的连通块再去一一配对,如果第一个队列为大小为 1,就把它也放到度数为 1 的那一类去。
做尘埃 做晚霞 我们总会再见的吧
下次见面时我们会 手捧鲜花
7.25(Day 12)
依旧模拟赛,但炸飞了。
依旧只会 T1。
考虑分治处理。
对于 \(k = 1\) 的情况不再多说,考虑 \(k > 1\) 的情况。
发现对于 \(k\) 如果已经处理好子问题(\(k - 1\))了,这一层会剩下 \(p\) 个互相独立的区间,考虑这咋计算。
发现如果每一层交错合并这样所有的值会合并到一起,依次向上传输即可。
向 C 老申请了打明晚的 CF,一个人的战斗啊,但留下的只有兴奋。
漆黑的夜空里 / 该如何提起 / 曾划过的流星
7.27(Day 13)
昨晚 CF 场了 F?!
max. candidate master, 1919
赢!!!
早上还是准时上的学。
今天是组合数学。
哦,是推式子,我们没救了。
首先先把原式子拆开:
考虑将 \(x^k\) 转化为第二 Stirling 数的写法:
考虑将 \(\binom {k} {j} \binom {n} {k}\) 重新划分为 \(\binom {n} {j} \binom {n - j} {k - j}\) 并整理式子:
发现 \(\sum _{k = j} ^{n} x^{k-j} \binom {n - j} {k - j}\) 是二项式定理,直接转化成 \((x + 1)^{n - j}\):
最后的 \(O(m^2)\) 的式子:
发现题目中定义的同种音乐其实是假的,只要除以m!就可以了(利用逆元)。
这样就是在集合 \(S\) 中选出 \(m\) 个子集,满足三点性质:
-
所有选出的 \(m\) 个子集都不能为空。
-
所有选出的 \(m\) 个子集中,不能存在两个完全一样的集合。
-
所有选出的 \(m\) 个子集中,1到n每个元素出现的次数必须是偶数。
考虑 DP,定义 \(f_i\) 表示到第 \(i\) 个子集,满足所有三点性质的方案数。
考虑从容斥的角度分析,得出转移。由性质 3 得到,确定了前 \(i − 1\) 个子集后,第 \(i\) 个子集也随之确定。这时方案数为 \(A _{2^n - 1} ^{i - 1}\)。
然后去掉不满足性质 1 的方案数。可以得出,如果第 \(i\) 个子集为空,那么前 \(i − 1\) 个子集可以凑成一个合法的方案 \(f_{i - 1}\)。
最后考虑性质 2。假设第 \(j\) 个子集与第 \(i\) 个子集重复,那么如果把第 \(j\) 个子集和第 \(i\) 个子集去掉,剩下的 \(i − 2\) 个子集可以凑成一个合法的方案,即 \(f_{i - 2}\),而 \(j\) 有 \(i − 1\) 种取值,子集 \(i\) 的取法为 \(2^{n} - i + 1\)。
转移如下:
在虚拟的黄昏里写一首无人读懂的歌。
7.28(Day 14)
模拟赛打到 CW 初三前三换球鞋。
赢!!!
依旧只会 T1,但写了 2.5h。
发现 \(O(n \log^2 n)\) 似乎是容易的,树剖加上线段树再卡卡常似乎就可以 90pts。
考虑优化。
考虑先把 \(lca,x,y\) 所在的王国处理一下,这里直接倍增跑就行了,这样的效果是把原来的一条路径分成了两条不交的链。
考虑思考这条链的性质。
发现这条链上的王国的深度最浅的点一定也在这条链上,在发现对于每个王国的贡献区间就是在链上连续的点的深度。
考虑离线下来,按照 \(k\) 从小往大排序,每次对于 \(k\) 的递增从父亲向儿子传递一下,如果本身就是叶子了,直接将其删除即可。
预处理的细节较多,复杂度:\(O((n + q) \log n)\),常数略大,原题开的 6s。
看繁花聚散,回首天涯路远。
7.29(Day 15)
电脑崩了,老是重启。
修了一上午的电脑,最后放弃,但课也基本没听。
只会一道打表题。
没绷住,点击图片。
句号被点下的地方,回声沿时间的墙无数次折返。
7.30(Day 14)
话说,暑假都过了一半了,但我咋还没放假。
依旧数学,但我还是不会。
似乎是整除分块的板子。
回到题目本身,首先可以发现一个性质(实际上这个性质是简化版的,我当时推出来的式子要复杂一点):
如果区间 \((l,r]\) 存在 \(x\) 的倍数,那么需要满足 \(\left\lfloor \frac{l}{x} \right\rfloor < \left\lfloor \frac{r }{x} \right\rfloor\)。
那么我们考虑枚举答案 \(i\),对于答案 \(i\),如果它满足上面的式子,那么这个 \(i\) 就是合法的。
根据数论分块套路,我们可以改为枚举 \(\frac {b} {i}\) 的商 \(x\),那么这个 \(x\) 必定对应着一个区间,而我们想要答案尽量大,就会想要取这个区间最大的那个,也就是 \(x\) 尽量大。
代回上面那个约束条件,我们发现因为是枚举商,所以 \(\frac {r} {x}\) 的值是不变的,我们再看左边的那个式子,发现 \(x\) 越大,越小,那么这个约束条件就越容易满足。
剩下直接做就可以了。
没啥好说的,放张图得了:

晚上是最后一天 MXCPC 的报名,依旧和 PLH 以及 WYTZ 组队,队名:

星图铺就的,未必是归途,但有人循着它,便不算迷路。
7.31(Day 15)
MD,模拟赛炸惨了。
T1 以为是数据点分治,结果就是个单 \(\log\) 做法,T2 做着做着忘记原来秒掉的关键性质是啥音。
-130pts,只想尽快结束。
我要放假!!!
只有奇数位的模拟赛打好的来了。
不会青的来了。
先把所有值全都变为 1。
发现一个点所对答案做出的贡献只有可能 \(+ 1\) 或 \(\times 2\),发现正着不好做(想了整个比赛),考虑正难则反。
考虑倒着处理 \(f_{i,j}\) 表示对于第 \(i\) 个位置,权值要求为 \(j\) 时的操作方案。
因为答案只有可能是 \(i\) 号位 \(+ 1\) 或 \(\times 2\) 得到的,得到了一个关于 \(i - 1\) 的子问题,DFS 解决即可。
64pts 是水,但我打一半忘记结论了。
显然的是相同的点尽量相邻,考虑到数字越大的放在中间越小,贪心的放入即可得到 64pts。
反正这世界,本来就不正常。
8.1
最后一天了啊。
早上为了防颓,和 @Danielcdo 打 duel ,练 data structures,依旧被薄纱。
已放弃学习 FFT,NTT(名字都背不下来),拉格朗日插值,矩阵树等一系列数论内容。
放假快乐。
你驻足于春色中,于那独一无二的春色之中。
8.2
学了下文化课,发现自己字都不大会写了。
晚上和同学踢球,腿酸。
8.3
图书馆没开门,遂摆烂。
依旧踢球,依旧腿酸。
8.4
下午说打个洛谷比赛看看,结果只会 T1?!
又变菜了啊。
每一个不曾起舞的日子,都是对生命的辜负。


浙公网安备 33010602011771号