2025HZ暑集做题记录(Part.3)
2025.8.1214-2025.8.28HZ暑集做题记录
2025.8.?~2025.8.? 莫比乌斯反演
简单一点的题在放假前就切掉了,这里放三道返校后切的题
你怎么知道我做的所有五道黑题有三道莫反
1.毒瘤之神的考验
设
则原式等于
枚举因数可 \(O(n\log n)\) 求出 \(f(x)\),难点在于求 \(g(x)\) 以及最终求答案
注意到 \(T\) 较大时 \(\frac{n}{T},\frac{m}{T}\) 较小,可在 \(T\) 较大时将 \(f(T) g(\lfloor\frac{n}{T}\rfloor,T) g(\lfloor\frac{m}{T}\rfloor,T)\) 预处理,\(T\) 较小时直接暴力求答案
2.简单的数论题
毒瘤之神的考验双倍经验版
注意到 \(\frac{i}{\gcd(i,j)},\frac{j}{\gcd(i,j)}\) 互质,由欧拉函数为积性函数,则
和上一题类似,同样的方法即可解决
3.幽灵乐团
咕咕咕。。。
过一段时间会单独发一篇博客
莫反题单体系的核心题之首。我eps年学OI的精华都在于此:极致的卡常,即使放宽时限,也全是极难卡常的;诡谲的题目设计,几乎所有OIer根本想不到的解法;过人的勇气,大家不敢用的危险知识点我全用;无法被击败的耐心,每个重复的底数,全部重新设计一遍指数;我的意志,代表极限扣难度,稳定休息段,创想高潮段的出题体系。本题包含所有莫反,从头做到尾不带一点点的重复,值得所有人去选择恰当的部分分来体验这道题。这就是最终的证明,这就是莫反的终极尽头。“我已经通过了最终的证明,现在我需要进入幽灵乐团”
2025.8.17~2025.8.19 NOIP2025专题-搜索&模拟
1.小木棍
去年五月这题就挂着,今年才AC。。
暴搜+各种神秘优化
- 答案必定为总长的因数,且大于木棍长度最大值
- 木棍长度从大到小排序,从前向后依次搜
- 剩余长度小于最短木棍长度直接返回
- 搜索完一根木棍后跳过相同长度的所有木棍
- 当前刚开始填或已填满时只要搜到可行方案结束后立即返回
- 寻找收首个可行位置时二分替代遍历
2.Expression
由低位向高位搜索
若当前末位可使等式成立,则直接填入对应的数
否则分别在 \(a,b,c\) 末位补充对应的数继续搜索
剪枝时 if(now > ans) return ; 大于不可写成大于等于,否则会被神犇hack
3.Distinct Paths
数据范围虚晃一枪
看似 \(n,m\le 1000\),实际上由 \(k\le 10\),路径上颜色不重复可知 \(n+m\le k+1\)
直接按每个格子依次搜索,需剪枝
- 若当前可用颜色不足以填到右下角,则直接返回
- 填同一个格子时,每一个未出现的颜色造成的贡献相同,只需搜索一次
4.Rotation Puzzle
meet in the middle简单题
存储状态时可以哈希,也可以直接把数组放到结构体里面
2025.8.19~2025.8.21 NOIP2025专题-DP
难得有一个做起来不那么吃力的专题
1.Construct Tree
先将所有边的长度从小到大排序为 \(l_1,l_2,\cdots,l_n\),设所有边构成的集合为 \(S\),注意到三个性质:
- 若 \(l_{n-1}+l_n>k\)则无解
证明:此时构造出的树必定含有同时包含 \(l_{n-1},l_n\),这条链长度大于 \(k\) - 若存在包含 \(l_n\) 且长度和为 \(k\) 的边集 \(T\subseteq S\) 则有解
证明:构造一条一段为 \(l_n\),\(T\) 中其他边接在 \(l_n\) 一侧的链,再将不属于 \(T\) 的边全部接在 \(l_n\) 与其他边相交处,此时存在长度为 \(k\) 的链,且特判掉上一条后可知 \(T\) 以外的边与 \(l_n\) 构成的链长度不大于 \(k\),则长度为 \(k\) 的链即为直径 - 若存在边集 \(T\subseteq S,T'\subseteq S\) 满足 \(T\cap T'=\varnothing\) 且两个集合总长度之和为 \(k\),总长度均不小于 \(l_n\),则有解
证明:构造分别由 \(T,T'\) 构成的两条链,将两条链拼在一起,其余边全部接在拼接处,则拼成的链即为直径
实现时使用 bitset 优化可行性背包
2.Jellyfish and EVA
题中有 \(a_i<b_i\),说明这是DAG,dp时直接倒序枚举节点编号
显然,每次转移时都优先选择成功概率大的(对应下文最优决策为选排名为 \(1\) 的节点),故转移时先将可达的点按成功概率降序排序,该节点的答案即为对可达的点成功概率与前往对应点的概率乘积求和
设 \(dp_{i,j}\) 表示在出度为 \(i\) 的点前往排名为 \(j\) 的点的概率
\(j=1\) 时相当于在 \(i\) 个点中随机选择,概率为 \(\frac{1}{i}\)
\(j>1\) 时若被随机选择的点在 \(2\) 到 \(j-1\) 之间,则会毁坏两条道路,使 \(j\) 的排名上升 \(2\),贡献为 \(\frac{j-2}{i}dp_{i-2,j-2}\);若在 \(j+1\) 到 \(n\) 之间,则 \(j\) 的排名会上升 \(1\),贡献为 \(\frac{i-j}{i}dp_{i-2,j-1}\)
这部分直接预处理
3.Travel Plan
经典Trick:对于最大值等于 \(x\) 的问题,可转化为最大值不大于 \(x\) 去掉最大值不大于 \(x-1\)
设节点个数为 \(u\) 的子树,其左子树大小为 \(l\),右子树大小为 \(r\),最大值不大于 \(i\) 的根链方案数为 \(g_{u,i}\),最大值不大于 \(i\) 的树链方案数为 \(f_{u,i}\)
根链可以是根节点本身或根节点连上左/右子树的根链,则
树链可以不经过根节点(只在左/右子树中),也可以经过根节点(同时经过两棵子树或者作为根链),则
最终答案为\(\sum_{i=1}^m i(f_{n,i}-f_{n-1,i})\)
\(n\le 1\times10^{18}\),需要记忆化搜索
4.Mighty Rock Tower
设从高度 \(i-1\) 堆到高度 \(i\) 所需期望操作数为 \(f_i\)
对是否掉到高度为 \(0\) 处进行分类讨论,则
移项,系数化为 \(1\),得
复杂度 \(O(n^2)\),瓶颈在于求和式,考虑如何优化
注意到题中 \(P\) 以百分数形式给出,仅有 \(100\) 中取值,不妨对每个 \(P\) 的取值都递推计算求和式的值,即可做到 \(O(1)\) 转移
2025.8.23-2025.8.24 NOIP2025专题-图论1
1.Small Multiple
同余最短路
将模 \(k\) 的值作为节点编号,对于每个 \(1\le x<k\) 都从 \(x\) 向 \((x+1) \mod k\) 连长度为 \(1\) 的有向边,从 \(x\) 向 \(10x \mod k\) 连长度为 \(0\) 的有向边,求 \(1\) 到 \(0\) 的最短路
2.01Sequence
差分约束
形如 \(x_j\le x_i+w\) 的式子类似于求最短路时的 \(dis_j\le dis_i+w_{i,j}\),故可从 \(i\) 向 \(j\) 连边权为 \(w\) 的边建图
判断可行性时用SPFA判断图中是否有负环,若有负环则无解(出现了形如 \(x_i\le x_i-c\) 的式子)
求答案时新建超级源点,从超级源点向所有点连边权为 \(0\) 的边,跑最短路
设序列中前 \(i\) 个位置 \(1\) 的个数为 \(s_i\),则 \(s_i\le s_{i-1}+1,s_{i-1}\le s_{i},s_{l-1}\le s_r-x\)
用SPFA跑差分约束即可在atcoder上通过此题,但学校OJ hack掉了SPFA,需要改为统计 \(0\) 的个数,从而去掉负边权,跑dijkstra
此题中无需建超级源点,直接从 \(0\) 号点开始求最短路
3.跳跳棋
对于每个状态 \((a,b,c)\) 有两个向外的转移:\(b\) 向左跳出去,\(b\) 向右跳出去;有至多一个向内的转移:离 \(b\) 较近的棋子向里跳(可能两个棋子到 \(b\) 的距离相同,此时不存在转移)
不难发现这构成了许多二叉树结构,每条树边都是一次转移,则可行性相当于初末状态是否位于同一棵树,操作次数相当于两点的树上距离
判断初末状态是否位于同一棵树只需判断能否跳到同一个树根
求树上距离需要求lca,但是该树的大小不支持用倍增、树剖等方法求,为此可以先让两点跳到深度相同处,然后二分跳的层数,求出答案
4.Turtle and Intersected Segments
对于三条两两相交的线段 \(i,j,k(a_i<a_j<a_k)\),由于 \(a_k-a_i=(a_k-a_j)+(a_j-a_i)\),故边 \((i,k)\) 可被 \((i,j)\) 与 \((k,j)\) 替代,这启发我们寻找与每条线段相交的线段中值的前驱后继
具体地,用 multiset 维护值,从小到大遍历所有位置,遇到左端点就将线段加入并查询前驱后继,遇到右端点就将线段删除,这样就将线段个数控制在了 \(O(n)\) 个,直接跑kruskal即可
5.DFS Trees
注意到所有边权两两不同,则最小生成树唯一
不难发现一个点可行仅当生成树以该点为根时所有非树边连接的节点均为祖先-后代关系,否则该非树边必定会被加入生成树
对于每个非树边,连接的两个节点的子树内的点能使以该点为根时两节点为祖先-后代关系,则只需将对应子树内点权加一,求出权值为 \(m-n+1\) 的点即可
6.XOR Replace
QED的博客里有,实在不想写了(逃

浙公网安备 33010602011771号