首页 > 其他 > 详细

[ARC098B] Xor Sum 2

时间:2021-07-10 21:55:11      阅读:20      评论:0      收藏:0      [点我收藏+]

关于异或运算和代数和运算有很不错的性质:

\(xor_{i = 1} ^ {n}a_i \leq \sum_{i = 1} ^ n a_i\)

所以我们考虑一段区间按题目来说是合法的,即 \(xor_{i = 1} ^ {n}a_i = \sum_{i = 1} ^ n a_i\) 是满足一段不符合,则整段不符合的性质的。
那么可以用 \(two-point\)

[ARC098B] Xor Sum 2
#include<iostream>
#include<cstdio>
#define ll long long 
#define N 200005

ll n;
ll a[N];
ll sum[N],xsum[N];//sum >= xsum

int main(){
	scanf("%lld",&n);
	for(int i = 1;i <= n;++i){
		scanf("%lld",&a[i]);
		sum[i] = sum[i - 1] + a[i];
		xsum[i] = xsum[i - 1] ^ a[i];
	}
	ll l = 0;
	ll ans = 0;
	for(int r = 1;r <= n;++r){
		while(l < r && (sum[r] - sum[l] != (xsum[r] ^ xsum[l])))
		l ++ ;
		ans += r - l;
	}
	std::cout<<ans<<std::endl;
}

[ARC098B] Xor Sum 2

原文:https://www.cnblogs.com/dixiao/p/14994478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!