这段是自己写的
#6 WA 了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
return x * f;
}
const int N = 2e5 + 5;
int n, m;
int a[N];
int ans; // 1 ^ 1 会变 0, 1 + 1 会进位 故题意 可转化为求每位最多只有 一个 1
int main() {
n = read();
for (int i = 1; i <= n; i++) a[i] = read();
for (int l = 1, r = 0; l <= n; l++) {
while (!(m & a[r + 1]) && r + 1 <= n) m ^= a[++r], ans += r - l + 1;
// ans += r - l + 1;
m ^= a[l];
// printf("l = %d, r = %d ", l, r);
// printf("%d\n", r - l + 1);
}
cout << ans << endl;
return 0;
}
学着第一篇题解写的
#6 WA 了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
return x * f;
}
const int N = 2e5 + 5;
int n, s1, s2;
int a[N];
int ans; // 尺取法
int main() {
n = read();
for (int i = 1; i <= n; i++) a[i] = read();
for (int l = 1, r = 0; l <= n; l++) {
while ((s1 + a[r + 1] == (s2 ^ a[r + 1])) && r + 1 <= n) s1 += a[++r], s2 ^= a[r];
ans += r - l + 1;
s1 -= a[l];
s2 ^= a[l];
}
cout << ans << endl;
return 0;
}
样例都能过,求助