UOJ #772. 【UER #11】企鹅游戏
非常有趣的一个题,各种做法都非常有趣!
首先显然建立 ACAM 之后对于每个询问串去 ACAM 中匹配,然后每个企鹅的权值是 \(3^i\) 的子树内点数次方。
一个结论是:所有初始串出现的询问总和是 \(O(L^{\frac{4}{3}})\) 的。
对于 \(\geq L^{\frac{1}{3}}\) 的初始串,只有 \(O(L^{\frac{2}{3}})\) 个,且每个最多在 \(O(L^{\frac{2}{3}})\) 个询问串中出现。对于 \(\leq L^{\frac{1}{3}}\) 的初始串,每个长度的串出现次数总和 \(\leq L\),因此总共出现次数是 \(O(L^{\frac{4}{3}})\) 的。
然后在虚树上暴力跳就行了,使用光速幂就可以做到 \(O(L^{\frac{4}{3}})\)。
另一个做法是依赖于模数的, \(3^i\bmod 2^{32}\) 显然是奇数,设为 \(2k+1\)。展开 \((2k+1)^x=\sum \limits_{i=0}^{x}{{x\choose i}(2k)^i}\)。因为模数是 \(2^{32}\),因此若 \(i\geq 32\),则值为 \(0\),因此只需要预处理 fail 树上 \((2k)^i,i\in [0,31]\) 的前缀和即可,这样可以做到 \(O(32L)\)。