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-题解