2026.8.28 模拟赛
https://oj.gxyzh.com/d/hzoj/contest/6a8e9af251f50c2bea28a736
| T1 | T2 | T3 | T4 | |
|---|---|---|---|---|
| 实际得分 | 90 | 35 | 80 | 68 |
| 期望得分 | 50+ | 30 | 60+ | 44 |
| 能力得分 | 100 | 35 | 60 | 44 |
T1 是 ACAM+树上差分,T2 是神秘 DP,T3 是分治(两种暴力的复杂度平衡),T4 是神秘状压.
这数据也是无敌了:
- T1 理论可以卡到 \(O(\sum {P_i}\sqrt{\sum |S_i|}\log |S|)\) 的算法竟然可以拿到 \(90\) 分,事实上构造长度为等差数列的串可以卡满.
暴力的 ACAM 可以轻松通过,但是正解 ACAM 可能会被卡常. - T2 数据较为正常.
- T3 是比较难绷的,第一种暴力为进行搜索+二分图染色剪枝,理论复杂度为 \(O(L^2(u-1)!!)\),令人震惊的是:这个暴力总耗时为 31 ms.
- T4 输出 0 有 44 分.
野人
不难发现这其实 ACAM 板子,但是场上只胡了一个带根号的哈希做法.
由于是多字符串匹配问题,所以想到 ACAM(或广义 SAM ?).
这样,我们只需要统计:每次添加一个字符串 \(P\),给每个原字符串 \(S_i\) 所作的贡献.
在 fail 树上考虑,若 \(u\) 结点匹配到,则其在 fail 树上的祖先均可以匹配到,我们需要给这些结点作一次贡献.
设最终匹配到的结点为 \(u_1,u_2,\dots u_v\),我们要在 fail 上给这些结点的祖先作贡献,但是每个祖先至多一次.
因此这是一个树链求并的过程,似乎只能用 bitset.
但事实上,可以使用 dfs 序神秘小性质处理:
- 将节点 \(u_1,u_2,\dots u_v\) 按照
dfs序排序. - 将节点 \(u_1,u_2,\dots u_v\) 的根链上贡献 \(+1\).
- 将
dfs序相邻的结点的LCA的根链上贡献 \(-1\).
可以使用树上差分+树状数组维护,时间复杂度为 \(O(\sum |P_i|\log |S_i|)\),算是一个套路题.
半决赛分配
概率 DP 题,其中枚举分数线进行形式化题意的思想十分聪明.
考虑设定一个分数线:\((c,t)\) 表示:\(c\) 为排名中第 \(k\) 名的分数,\(t\) 为分数为 \(c\) 的最大标号.
那么晋级的必要条件为:
- 若 \(i<t\),则 \(v_i\ge c\).
- 若 \(i=t\),则 \(v_i=c\).
- 若 \(i>t\),则 \(v_i> c\).
加上满足上面 3 个要求的下标有 \(k\) 个,这样就是充要条件.
显然,所有的 \((c,t)\) 是事件集的一个划分.
现在考虑先枚举 \(t\),再枚举 \(c\in [worst_t,best_t]\).
那么这种情况发生的概率为:
在已固定选手 \(t\) 得分的条件下,令 \(p_i\) 为选手 \(i\) 满足上述晋级条件的概率。于是
令 \(f_{i,j}\) 是前 \(i\) 个人中,有 \(j\) 个晋级的概率.
那么有转移:
同理有 \(g_{i,j}\) 表示后缀的信息.
现在考虑统计每一个选手 \(i\) 的贡献,为:
考虑枚举前面和后面各有 \(L,R\) 个人晋级,满足 \(L+R=k-1\)
那么贡献为:
由于上面的贡献是可以直接累加的,按照位置进行统计即可.
因此时间复杂度为 \(O(Wn^3)\).
不交半圆
使用两种暴力,按照数据范围进行分治.
暴力一
其实在样例解释中就有提示.
考虑将弦看作点,交叉点看作边,使用二分图染色即可判断是否合法.
剩下的考虑枚举 \(-1\) 的连边情况.
不难发现有 \((u-1)!!\) 种本质不同的情况.
因此时间复杂度为 \(O((u-1)!!L^2)\).
令人震惊的是:每次 dfs 一开始就检查是否是二分图,这个强力的剪枝可以使总耗时达到惊人的 31 ms.
暴力二
这个暴力相交于前一个显得更加复杂.

浙公网安备 33010602011771号