原题链接。
首先这个数据范围就很 meet in middle。
首先一个关键性质是对于任意的一个顶到界限的 \(a\) 都能保它顶到界限那一位后面的位数合法,因为它后面随便选就意味着一定能通过调整使得后面的位置异或完是零。
然后我们开一个 set 存下每个数字能顶到 \(l\) 或 \(r\) 的界限的情况和顶到界限的位数,注意不能让存入的情况不合法。
接着枚举右侧顶到界限的位置 \(j\),那么 \(j\) 之前的位数两侧的异或值就要相同,考虑利用这个进行 dfs。
我们把最后 \(j\) 位抹掉,贡献提前算好开个 map 存一下,接着枚举 \(j+1\) 这一位的状态,dfs 时存下第 \(j+1\) 这一位放偶数和奇数个 \(1\) 的方案数,这样可以保证第 \(j+1\) 位的合法,统计答案的时候记得除以为了保证 xor 为 0 位数的方案数。(人话:乘 \(2^{-j}\))
代码。