B. AGAGA XOOORRR

B. AGAGA XOOORRR

题目链接

题目大意

给你一个长度为n的序列进行异或运算使得序列序变为长度>=2的只有相同元素的序列。问你是否可能

思路
当最后相同的元素为偶数个时,最后异或得到结果为0,如果最后相同的元素为奇数个时,你只需要判断从前往后每个异或得到的结果是或否与最后一个结果相同,记录这些个数,如果个数大于2的话就是可以的,也就是将这些元素,转换为最后异或结果相同的元素,为什么是大于2呢,如果从0只有一个元素也就是最后一个那么绝对不可能,如果从1呢这种情况属于偶数,会被直接判断掉。

通过代码

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define sdf(n) scanf("%lf",&n)
#define pdf(n) printf("%.lf",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define debug(a) cout<<a<<"??"
#define me(a)  memset(a,0,sizeof(a))
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=1;i--)
#define ph push
#define pi pair<ll,ll>
#define fi first
#define se second
const ll mod = 1e9 + 7;
ll a[3000],sum[3000],tag;
int main(){

    ll t,n;

    sl(t);

    while(t--){
      ll k=0;
      sl(n);
     
      pre(n)sl(a[i]);

      pre(n)sum[i]=sum[i-1]^a[i];

      if(sum[n]==0){
      
        puts("YES");
      
        continue;
      
      }
      ll q=0;
      for(ll i=1;i<n;i++){


        q^=a[i];

        if(q==sum[n]){
          k++;
          q=0;

        }

      }
      if(k>=2)puts("YES");
      else puts("NO");
}
      return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值