CF1109A Sasha and a Bit of Relax
Posted jklover
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1109A Sasha and a Bit of Relax相关的知识,希望对你有一定的参考价值。
CF1109A Sasha and a Bit of Relax
- 用 (xorsum[l,r]) 表示 (a[l] oplus a[l+1] oplus a[l+2]... a[r-1] oplus a[r]).
- 则数对 ((l,r)) 满足 (xorsum[l,mid]=xorsum[mid+1,r]and 2|(r-l).)而
[ xorsum[l,mid]=xorsum[mid+1,r]\ Leftrightarrow xorsum[l,r]=0\ Leftrightarrow xorsum[1,l-1]=xorsum[1,r]. ]
- 于是只需开两个桶,分别记录奇数偶数位置上的 (xor) 前缀和出现次数.
- 注意开始时 (0) 也在偶数位上出现了,需加入桶中.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
int x=0;
bool pos=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
pos=0;
for(;isdigit(ch);ch=getchar())
x=x*10+ch-'0';
return pos?x:-x;
}
int odd[(1<<20)+10],even[(1<<20)+10];
int main()
{
int xorsum=0;
int n=read();
ll ans=0;
++even[0];
for(int i=1;i<=n;++i)
{
int x=read();
xorsum^=x;
if(i&1)
{
ans+=odd[xorsum];
++odd[xorsum];
}
else
{
ans+=even[xorsum];
++even[xorsum];
}
}
cout<<ans<<endl;
return 0;
}
以上是关于CF1109A Sasha and a Bit of Relax的主要内容,如果未能解决你的问题,请参考以下文章
CF1109B Sasha and One More Name