2023.10.03补题两则

2023.10.03T2

Solution

\(\bmod{2}\) 意义下,\(-x^{c} = x^{c}\)

对于 \(A_i \equiv C \pmod{B}\),变为 \(A_i - C \equiv 0 \pmod{B}\),那么 \(-C\) 操作可以看成是 异或\(C\)

对于 \(A^{'}_i \equiv 0 \pmod{B}\) 的形式,欲找到最大的 \(B\),则 \(B\) 显然是 \(\gcd\limits_{i = 1}^{n}(A^{'}_i)\)

利用辗转相除法的思想求多项式的 \(\gcd\)

对于 \(\gcd(a, b)(a > b)\),将其转为 \(\gcd(a - xb, b)\),其中 \(x\) 的作用是把 \(b\) 的最高位与 \(a\) 的最高位对齐,这样每次可以将 \(a, b\) 中较大的二进制数位减少 \(1\)

做单次 \(\gcd\)\(O(n^2)\) 的,总时间复杂度为 \(O(n^3)\)。由于是二进制操作,考虑用 bitset 优化成 \(O(\frac{n^3}{w})\)

2023.10.03T3

Solution

考虑对于 \(\{ 0, 1, 2, \dots, 2^{n} - 1 \}\) 进行操作。

拆位进行考虑,发现对于一个数 \(x\),进行 \(m\) 轮操作后,它将变为 \(x^{'}\) 满足:

  • \(x^{'}\) 的高 \(n - m + 1\) 位是 \(x\) 的低 \(n - m + 1\) 位。
  • \(x^{'}\) 的低 \(m\) 位是 \(x\) 的高 \(m\) 位翻转后的结果。

至于这个结论是怎么猜的,可以结合 FFT 的实现原理。

于是对于每组询问的 \(x\),我们可以得到 \(m\) 次操作后对应的 \(x^{'}\)。这本质上是 二进制下各数位的置换

于是对 \(n + 1\) 个二进制位做 \(O(n)\) 置换快速幂即可。

时间复杂度 \(O(nQ)\)

posted @ 2023-10-03 18:14  Schucking_Sattin  阅读(10)  评论(0编辑  收藏  举报