Author: loop3r
Date: 20260322
tag: 双指针
link: https://atcoder.jp/contests/abc098/tasks/arc098_b问题描述
有一个长度为
请你求出满足以下条件的整数对
输入格式
输入以如下格式从标准输入读入:
输出格式
输出满足条件的整数对
分析
异或(相同为
设
设
每次循环内,如果 s1 += a[j + 1]; s2 ^= a[j + 1]; j++;。当循环结束时
更新答案:ans += j - i + 1;。
移动 s1 -= a[i]; s2 ^= a[i]; i++;。
参考代码
cpp
#include <bits/stdc++.h>
using namespace std;
int n, a[200010];
long long s1, s2, ans;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int i = 1, j = 0;
while (i <= n) {
while (j + 1 <= n && s1 + a[j + 1] == (s2 ^ a[j + 1])) {
s1 += a[j + 1];
s2 ^= a[j + 1];
j++;
}
ans += j - i + 1;
s1 -= a[i];
s2 ^= a[i];
i++;
}
cout << ans << endl;
return 0;
}