Xor Sum 2

AtCoder-Xor Sum 2open in new window

分析

异或是不进位的加法。

性质:,当且仅当a \And b=0时取等号。

  • 如果不满足题意,那么也不满足题意;
  • 如果满足题意,那么也满足题意。

实现

#include <iostream>
using namespace std;

typedef long long LL;
const int N = 200010;
int n, a[N];

int main () {
    cin >> n;
    for (int i = 1; i <= n; ++ i) cin >> a[i];

    LL res = 0, sum = 0, xor_sum = 0;
    for (int j = 1, i = 1; j <= n; ++ j) {
        sum += a[j], xor_sum ^= a[j];
        while (i < j && sum != xor_sum) {
            sum -= a[i], xor_sum ^= a[i];
            ++ i;
        }
        res += j - i + 1;
    }
    cout << res << endl;
    return 0;
}
最后修改于: