cf1516 B. AGAGA XOOORRR(数学+位运算)

Posted 为什么他们cf写的这么快

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1516 B. AGAGA XOOORRR(数学+位运算)相关的知识,希望对你有一定的参考价值。

题目链接
在这里插入图片描述
题意:给定长度为n的数组a,每次可以选择相邻的两个数进行异或,问最后能不能变成至少个数大于等于2且每个元素都相等的数组。
思路:首先第一点,如果全部异或和为0的话显然满足条件,因为只有相同两个数异或才会是0。那么如果异或和不为0怎么办,还有一种方法能满足条件,我们假设异或和为x,我们看一下整个数组某段异或和等于x的段数能否大于等于3,只要有显然满足。

#include<bits/stdc++.h>
using namespace std;
int n,T,a[2005];
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		int sum=0, now=0,cnt=0;
		scanf("%d",&n);
		for(int i=1;i<=n;++i) scanf("%d",&a[i]),sum^=a[i];
		if(sum==0){
			puts("YES");continue;
		} 
		for(int i=1;i<=n;++i)
		{
			now^=a[i];
			if(now==sum) cnt++,now=0;
		}
		printf("%s\\n",(now==0&&cnt>=3)?"YES":"NO");
	}
}

以上是关于cf1516 B. AGAGA XOOORRR(数学+位运算)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #717 (Div. 2)-B. AGAGA XOOORRR-题解

CF 520 div.2 B. Math

cf B. Bear and Compressing

cf1556B B. Take Your Places!

(CF#257)B. Jzzhu and Sequences

CF #727(div2)B. Love Song,前缀和