方知蓦然回首之时
那人却已不在灯火阑珊处

被 mwh 嘲讽:「你会 SAM 吗,你不是什么题都写 SA 的吗」 于是自己想出来了这题

考虑根号分治,对于一组查询 (l, r, k) ,我们先将其拆成 (1, r, k) - (1, l - 1, k)

length[k] > \sqrt n 考虑这样的 k 不会超过 \sqrt n 个,对于每个都在 SAM 上暴力 DFS 统计出每个形如 (1, i, k), i \in [1, n] 的答案,时间复杂度 O(n \sqrt n)

length[k] \leq \sqrt n 考虑先把所有 (1, i, k) 按照 i 从小到大排序。ij 产生贡献当且仅当 i 在 SAM 上的结束节点时 j 在 SAM 上某个节点的祖先。考虑扫描线,每次插入一个串就将其子树增加 1 ,每查询一个串就暴力遍历在 SAM 上的每个点查询,由于串的长度 \leq \sqrt n ,所以单个询问最多查询 \sqrt n 次。

如果使用线段树状物来维护子树的修改,时间复杂度是 O(n \sqrt n \log n) 的。考虑到修改只有 O(n) 次而询问有 O(n \sqrt n) 次,可以考虑使用 O(\sqrt n) 修改,O(1) 查询的分块来解决。

READ MORE

还记得去年去打这个比赛的时候是人生第一次 ACM ... 那是还是普及选手,被 mwh 和 wxw 爆踩。

时间过的好快啊,没想到转眼又是一年过去了诶 ... 仿佛去年来的时候,记忆还是那么的清晰呢 ...

那么 ... 按照惯例,来写流水账了~

READ MORE

对于两棵树 T_1, T_2,定义它们的交 T_1 \cap T_2 是它们的边集的交形成的森林,k(T_1 \cap T_2)表示这个森林的连通块个数,求下列三种问题之一:

  1. 给定 T_1, T_2,求 y^{k(T_1\cap T_2)}

  2. 给定 T_1,求 \sum_{T_2}y^{k(T_1\cap T_2)}

  3. 给定 n,求 \sum_{T_1}\sum_{T_2}y^{k(T_1\cap T_2)}

其中 n \leq 10^5 ,上面的 sum 是对所有 n^{n-2} 种可能的树求和。答案对 998244353 取模。

orzrqy

READ MORE

先看 n=1 的情况,考虑令 a = w_{1, 1} ,用 f_i 表示跳了 i 步的答案,则 f_i = a^i \binom n i

考虑

\begin{aligned} ans &= \sum_{i \bmod k=m} f_i = \sum_{i \bmod k=m} a^i \binom ni \\ &= \sum_{i=0}^n [k|i-m] a^i \binom ni \\ &= \sum_{i=0}^n \frac 1k \sum_{j=0}^{k-1} \omega_k^{j(i-m)} a^i \binom ni \\ &= \frac 1k \sum_{j=0}^{k-1} \omega^{-mj}_k \sum_{i=0}^n \binom ni (\omega^{j}_k a)^i 1^{n-i} \\ &= \frac 1k \sum_{i=0}^{k-1} \omega^{-mi}_k \left(\omega^i_k a + 1\right)^n \end{aligned}

考虑后面的 \displaystyle{\left(\omega^i_k a + 1\right)^n} 对于固定的 i 是相同的,可以与先处理出 i \in [0, k) 的值,设为 c(i)

前面的部分有个暴力的做法就是多项式多点求值出多项式 \displaystyle{\frac 1k \sum_{i=0}^{k-1} x^i c(i)}\omega_k^0, \omega_k^{-1}, \omega_k^{-2} ... \omega_k^{-k+1} 的值,复杂度 O(k \log^2 k),然而貌似被针对了过不去 ...

考虑一个优秀一点的做法,如何处理 \omega^{-mj}?毛爷爷论文中有个做法是把 ij 拆成 \frac {(i+j)^2} 2 - \frac {i^2} 2 - \frac {j^2} 2 ,然而此题中可能存在单位根没有二次剩余的情况。考虑把 ij 拆成 \binom {i+j} 2 - \binom i2 - \binom j2 ,那么原式可以化为

\begin{aligned} ans &= \frac 1k \sum_{i=0}^{k-1} \omega^{-mi}_k c(i) \\ &= \frac 1k \sum_{i=0}^{k-1} \omega^{\binom {i-m} 2 - \binom i2 - \binom {-m}2} _k c(i) \\ &= \frac {\omega^{- \binom {-m}2}} k \sum_{i=0}^{k-1} \omega^{\binom {i-m} 2}_k \left( \omega^{- \binom i2}_k c(i)\right) \\ \end{aligned}

显然是一个卷积的形式,那么卷积下即可,复杂度 O(k \log k)

考虑 n \le 3 的情况,原来的转移会变成矩阵,感兴趣的读者可以先做下 BZOJ3328 PYXFIB ,与 n = 1 是本质相同的,并且可以发现 c(i) 仍然是一个常数,同理处理下再卷积即可。

READ MORE