已被严肃卡常,呃呃。你说得对,但是我们有
j=0∑a(jb)≡(ab−1)(mod2)
考虑证明。首先把左半边改写为 0≤j≤a 且 j⊆b 的 j 个数。那么显然可以把 a 的低位删掉变为 a′,使得 lowbit(a’)≥lowbit(b),这不影响答案。
接下来考虑一种计算方式是,枚举 p 使得前面的位上 a′,j 相同,第 p 位上 a′ 严格比 j 大,然后后面的位任取(或者这样的 p 不存在)。显然当 p>lowbit(b) 的时候后面任取的方案肯定有偶数种(因为 j 在 lowbit(b) 这一位上可以取 0,1),这是无意义的,因为我们只关心答案 mod2。那么我们只需要考虑 p=lowbit(b) 与不存在这样的 p 的两种情况,不难发现后者满足则前者一定满足,前者不满足则后者一定满足,此时答案为 0;则答案为 1 等价于 a′⊆b−2lowbit(b),这又等价于 a⊆b−1。
下面令 p 为题目中的 100p。考虑计算一个数被异或的次数。令这个数出现了 a0 次,其他数分别出现了 a1,a2,…,ak 次,可以写出式子:
===c=1∑⌊a0p⌋i=1∏kj=0∑c(jai)c=1∑⌊a0p⌋i=1∏k(cai−1)c=1∑⌊a0p⌋(c∩i=1k(ai−1))(⌊a0p⌋∩i=1k(ai−1)−1)−1
对于出现次数相等的数,它们的异或次数显然也是相等的,可以合并计算。根据经典结论本质不同的出现次数只有 O(n) 种,于是我们只需要知道所有可能的出现次数,以及对于一个出现次数 x,出现次数为 x 的数的个数,以及所有出现次数为 x 的数的异或和就可以暴力算答案了。直接上莫队即可做到单根号。