做题记录 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)\)

代码

参考

posted @ 2026-03-14 07:06  Hstry  阅读(0)  评论(0)    收藏  举报