做题记录 26.3.13
\(\textcolor{blue}\odot\) CF2174C2 Beautiful Patterns (Hard Version)
拆贡献,则转化为计算选择两个区间,求两者都是回文的概率总和
若两者中点不同,则可证概率等于两者分别回文的概率乘积,这部分容易计算
若两者中点相同,则概率等于较长者为回文的概率
暴力实现容易做到 \(O(\sum n^2\log p)\),容易优化到 \(O(\sum n\log p)\),精细实现可以做到 \(O(\sum (n+\log p))\)
\(\textcolor{purple}\odot\) CF2173F Isla's Memory Thresholds
显然从 \(l\) 向 \(r\) 跳的过程每次跳过的数量不降
考虑根号分治,令阈值为 \(S\),步长 \(\le S\) 的部分统一处理,步长 \(>S\) 的部分暴力跳,后者容易做到 \(O(q\frac nS\log n)\)
对于前者,从小到大枚举步长,枚举询问,考虑一次性跳完所有当前步长
二分跳跃次数,可以做到 \(O(Sq\log n)\)
通过化简,可以将二分变为双指针,从而这部分复杂度 \(O(n\log n+S(q+n))\)
总时间复杂度 \(O(n\log n+\frac{qn\log n}S+S(q+n))\),取 \(S=O\left(\sqrt{\frac{qn\log n}{q+n}}\right)\) 可以做到 \(O(n\log n+\sqrt{qn(q+n)\log n})\)
存在 \(O(q\sqrt n)\) 的算法
\(\textcolor{purple}\odot\) CF2172H Shuffling Cards with Problem Solver 68!
显然操作 \(k\) 次后回到初始状态,因此 \(t\gets t\bmod k\)
此时初始 \(i\) 位置移到 \(i\times 2^t\bmod (2^k-1)\)
初始每个位置建立一点,最终相邻的两个位置前者连向后者,则可以得到 \(2^{k-t}\) 条长度 \(2^t\) 的链,第 \(i\) 条链对应初始的 \(x2^t+i\;(0\le x<2^{k-t})\) 位置
加上循环位移,先复制一份 \(a\),则位移 \(o\) 后第 \(i\) 条链对应 \(x2^t+i+o\)
令 \(C=2^{k-t}\),\(L=2^t\)
对于每个 \(0\le i<2^k\) 预处理 \(x2^t+i\;(0\le x<2^{k-t})\) 构成的字符串的哈希值
比较两个位移 \(o_1,o_2\) 时,先二分得到第一条存在不同的链,然后在链上二分
时间复杂度 \(O(k2^k)\),使用线性 \(\text{SA}\) 应该可以做到 \(O(2^k)\)

浙公网安备 33010602011771号