CF1835C Twin Clusters 题解

有点神奇。

只要有异或和相等的两个区间即可。

类似生日悖论,期望找到异或和相等的区间为根号值域次,数据小时暴力。

再想想正解。

共有 22k+1=4k×22^{2k + 1}=4^k \times 2 个区间,但是值域只有 4k4^k,所以必然有解。

我们对值域分成前 kk 位和后 kk 位考虑,找到 sr1sl11sr2sl21=0s_{r1}\oplus s_{l1-1} \oplus s_{r2} \oplus s_{l2-1}=0 的对,考虑 sr1sl11s_{r1} \oplus s_{l1-1} 的前 kk 位相同,sr2sl21s_{r2}\oplus s_{l2-1} 的前 kk 位相同,然后让他们的后 kk 位相同,这样就满足条件了。

就是找到前 kk 位相同的几堆,每堆可构成堆数减一对,然后考虑它们的后 kk 位异或和是否为 00

想想为什么能找到,类似的,前 kk 位共有 2k+1+1=2k+2k+12^{k+1}+1=2^k+2^k+1 个前缀异或和,但值域只有 2k2^k,所有至少产生 2k+22^k+2 个相同的数,只能找到 2k+12^k+1 对前 kk 位相同的数即可,因为后 kk 位值域只有 2k2^k,所以一定有重复的。

时间复杂度 O(2k+1)\mathcal O(2^{k+1})

posted @ 2023-10-23 22:16  蒟蒻orz  阅读(2)  评论(0编辑  收藏  举报  来源