牛客寒假集训营 子段异或

题目传送门


思维题,如果[1,a]区间的异或和为x,[1,b]区间的异或和也为x,那么(a,b]区间的异或和为0。这样我们只需求异或前缀和就行了。


map<ll, ll> mp;
int main()
{
       ll n;
       cin >> n;
       ll sum = 0;
       ll ans = 0;
       mp[0] = 1;
       while (n--)
       {
              ll a;
              cin >> a;
              sum ^= a;
              ans += mp[sum];
              mp[sum]++;
       }
       cout << ans << endl;
       return 0;
}
发布了91 篇原创文章 · 获赞 67 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hesorchen/article/details/105244055
今日推荐