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

题解 CF718C Sasha and Array

线段树维护矩阵CF718C Sasha and Array

题解 CF718C Sasha and Array

CF719E. Sasha and Array [线段树维护矩阵]

CF1109D Sasha and Interesting Fact from Graph Theory 组合数