2026.8.21 模拟赛
https://oj.gxyzh.com/d/hzoj/contest/6a86e3ad51f50c2bea2523e0
这场是 xzz_cat6 出的题.
| T1 | T2 | T3 | T4 | |
|---|---|---|---|---|
| 实际得分 | 100 | 0 | 60 | 10 |
| 期望得分 | 100 | 0 | 60 | 45 |
| 能力得分 | 100 | 30~100 | 60~100 | 45 |
T1 是签到题(贪心+构造),T2 是数论+数位 DP,T3 是字符串,T4 是树上统计问题.
二项式定理
算是一道较为综合的题目,巧妙结合了 Lucas 定理 与 费马小定理 的性质,同时使用数位 DP 统计答案,个人感觉可以给到 蓝/紫.
首先,这个模数是比较坑的(听说这是 UKE 的建议),做了半个小时才发现不是质数.
考虑对于模数进行质因数分解:\(998244335=5\times 11\times 17\times 137\times 7793\).
注意到,这个模数分解出来的质数都是一次的,因此可以考虑求出每个质数下的答案,使用中国剩余定理合并答案.
现在我们考虑求解模数为 \(p\) 下的答案,\(p\) 为质数:
不难发现 $\left \lfloor \sqrt{i} \right \rfloor $ 是难以处理的,因此放在最外层枚举:
显然前面枚举 $\left \lfloor \sqrt{i} \right \rfloor $ 的复杂度为 \(O(\sqrt{n})\),因此考虑优化部分:
我们可以使用前缀和优化,设函数 \(T(m)\),我们需要求出:
对于组合数运用 Lucas 定理,对组合数进行 \(p\) 进制分解:
同理对 \(x^k\) 运用费马小定理:
代入原式:
由于注意到 \(p\) 很小,因此考虑预处理如下函数:
考虑在 \(p\) 进制下进行数位 DP.
记 \(n\) 的 \(p\) 进制分解为 \((n_0n_1\dots n_d)_p\),\(m\) 的 \(p\) 进制分解为 \((m_0m_1\dots m_d)_p\).
考虑从高位到低位进行 DP,因此设计如下 DP 状态:
- 设 \(dp_{0,i}\) 表示前 \(i\) 位小于 \(n\) 的总贡献.
- 设 \(dp_{1,i}\) 表示前 \(i\) 位等于 \(n\) 的总贡献.
有如下转移:
因此不难发现我们只需要预处理 \(\log_p n\) 行 \(f\) 与 \(pre\).
总复杂度为 \(O(\sqrt{n}\log_p n+\sum p\log_p n)\).
字符串
求出字符串的两层 border.
法一
进行 hash 预处理,方便判断两个子串是否相等.
考虑枚举外层:\(i: \frac{n}{2}\to 1\),内层 border 暴力判断.
我们每次求出内层 border 的最大长度,那么对于 border 有如下性质:
在原串两侧各添加一个字符,那么 border 至多增加 2.
有了这个性质便十分容易了,直接暴力枚举即可.
时间复杂度为 \(O(n)\).
法二
我们构造如下字符串:\(T=S_1S_nS_2S_{n-1}\dots S_2S_{n-1}S_1S_n\).
即将原串反转后插入原串,xzz_cat6 表示这是一个经典的字符串构造方法.
此时,原串的两层 border 即为 \(T\) 上的两层回文前缀.
可以使用 Manacher 与 简单 DP 求解.
越界
一道比较综合的树上题,其各种做法包括:
Dsu on tree,树链剖分,点分治,虚树,边分树合并……
法一
Dsu+树剖+BIT,你看看这三个也知道这不是一般的 \(\log^3\),个个都是小常数.
看这个式子:
现在考虑 Dsu,此时相当于枚举 \(lca\),由于可以枚举子树,因此可以枚举 \(x\).
因此我们只需要求出:
看到 \(lca\),可以想到树剖,将 \(dep_y\) 看作权值,记作 \(a_y\).
因此可以对于 \(T'\) 进行树剖,考虑查询时会有 3 种贡献:
- 在 \(x\) 子树内.
- 在 \(x\) 的重链祖先的子树内.
- 在 \(x\) 跳链时的轻子树内.
因此考虑 3 种维护:
- 对于每一条重链,维护后缀 \(a_y\) 的最大值,可以使用 BIT.
- 对于每一条重链,维护前缀 \(a_y-dep_x\) 的最大值,可以使用 BIT.
- 对于每个节点,维护轻子树 \(a_y\) 的最大值,可以使用 堆/BIT.
因此总时间复杂度为 \(O(n\log^3 n)\).

浙公网安备 33010602011771号