题解:AT_abc418_d [ABC418D] XNOR Operation
题目不难。
解题过程
首先要发现的是,对于一个字符串,只有当这个字符串里
为什么?我们把每相近的两个
现在确定了这种特殊字符串可以合成
于是问题变成了:一个字符串中有多少子串
首先可以对
可能有点啰嗦,见谅。
代码
你没看错,就这么短。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5 + 5;
int n, sum, jsl, osl = 1;
ll ans;
string s;
int main(){
cin >> n >> s;
s = ' ' + s;
//前缀和数组可以省略,用一个变量记录,表示字符串第1到i个字符有多少个0
for(int i = 1;i <= n;i++){
sum += (s[i] == '0');
if(sum & 1) ans += jsl++;//更新答案和奇数数量
else ans += osl++;//更新答案和偶数数量
}
cout << ans;
return 0;
}