更优秀的复杂度
查看原帖
更优秀的复杂度
205541
Aftglw楼主2022/11/22 15:55

对于这道题,时间复杂度瓶颈在于求出初始局面需要的最小操作数。

可以从后向前扫,每遇见一个 11 就操作一次,时间复杂度可以做到 O(nn)\mathcal O(n \sqrt n)O(nlogn)\mathcal O(n \log n)

但其实可以更快。

考虑初始局面中为 11 的位置,这些位置需要被按奇数次开关;同理初始为 00 的位置需要被按偶数次开关。

又因为操作一个位置 pp 相当于把 pp 的约数位置的开关全部按一次,那么设最终会在 ii 处操作 bib_i 次,设原序列为 aa ,那么有关系式:

ad=(dnbn)mod2a_d = (\sum_{d \mid n} b_n) \bmod 2

现在已知 aia_i ,可以通过 Dirichlet 后缀和的逆过程求解 bib_i

由于在 mod 2\bmod \ 2 意义下进行,所以解出来 bi=0/1b_i = 0/1,也就是每个位置至多被操作一次。

时间复杂度 O(nloglogn)\mathcal O(n \log\log n),接近线性。

但是由于我的常数比较大,所以跑不过一部分 O(nlogn)\mathcal O(n \log n) 做法。qq_emoji: kk

2022/11/22 15:55
加载中...