读题,可以发现题目要求的是所有的数对的xor值的贡献之和。那么这里的贡献是什么呢? 注意所有连续子数组,其实可以等价于找到两个数字,然后分别向左边和右边扩展后得到的区间,在这些区间里,我们找到的这对数字是可以为答案做出贡献的。 假设我们的数组是1-下标的,我们找到的第一个数字下标为l,第二个数字下标为r,那么这对数字对于答案的贡献就是。 那么为了计算这个答案,可能会想到用 for (int i = 1; i < n + 1; i ++) { for (int j = i + 1; j < n + 1; j ++) { ans += i * (n - j + 1) * a[i] ^ ...