首页 > 其他分享 >Codeforces Round 717 (Div. 2) B. AGAGA XOOORRR(位运算)

Codeforces Round 717 (Div. 2) B. AGAGA XOOORRR(位运算)

时间:2023-04-04 17:46:17浏览次数:59  
标签:满足条件 AGAGA 数字 717 LL Codeforces 异或 const eg

https://codeforces.com/contest/1516/problem/B

题目大意:

给定长度为n的数组a,问我们能不能一直选择两个相邻的元素进行异或后,删除这两个值,把异或值留下来,

最后剩下>=2个数字,它们都是相同的?

可以做到输出YES,不能的话输出NO。
input 
2
3
0 2 2
4
2 3 1 10
output 
YES
NO

题目中说:留下的数字至少有两个,所以我们可以从2开始推:
当留下两个数字相同时(eg:1 1),说明我们把这两个数字异或后就变成了0,也就是说,我把全部数字异或后等于0,可以满足条件;
当留下三个数字相同时(eg:2 2 2),说明我们可以把数组分成三个段,前中后,一旦异或前缀中这三段相等,即可满足条件;
当留下四个数字相同时(eg:3 3 3 3),我们可以先对它们进行深入思考,相邻两两合并,不就又成了3 3,所以也可以满足条件;
当留下五个数字相同时(eg:1 1 1 1 1),我们先思考,当相邻两个异或就变成了0,0再和旁边一个数字异或就又变成了1,就可以变成3个相同数字(eg:1 1 1),满足条件;
偶数依此类推,全部数字异或即可;
奇数以此类推,分成三个段相等即可。

如何判断三个段相等,那必须是异或前缀嘎嘎好用!

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18,MINN=-MAXN,INF=0x3f3f3f3f;
const LL N=2e7+10,M=2023;
const LL mod=100000007;
const double PI=3.1415926535;
#define endl '\n'
LL a[N],b[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    while(T--)
    {
    	LL n;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    	     cin>>a[i];
       	     b[i]=b[i-1]^a[i];
	}
	if(b[n]==0) cout<<"YES"<<endl;//两段
	else
	{
 	      bool flag=false;
	      for(int i=1;i<=n;i++)
	      {
 		   for(int j=i+1;j<=n;j++)
		   {			
                        if(b[i]==(b[j]^b[i])&&(b[j]^b[i])==(b[n]^b[j]))//三段
			{
			     //cout<<i<<" "<<j<<endl;
			     flag=true;
			     break;
			}
  		   }
		   if(flag==true) break;
	      }
	      if(flag==true) cout<<"YES"<<endl;
	      else cout<<"NO"<<endl;
	 }
    }
    return 0;
}

标签:满足条件,AGAGA,数字,717,LL,Codeforces,异或,const,eg
From: https://www.cnblogs.com/Vivian-0918/p/17287195.html

相关文章

  • Codeforces Round 862 (Div. 2) A-D题解
    比赛地址A.WeNeedtheZero题意:给出一个数组,对任意1<=i<=n,令bi=aix,问是否存在x,使得b<sub>1</sub>b2...bn=0Solution如果n为奇数,那么x一定存在,因为偶数个x异或得到的是0,直接令x=0(a<sub>1</sub>a2...an)即可如果n为偶数,那么x取任何值都不会影响结果,所以只用看a1a<sub>2</sub......
  • Codeforces Round 862 (Div. 2) (4.2)
    CodeforcesRound862(Div.2)A-WeNeedtheZero思路:某个数被异或两次相当于没变,即判断n的奇偶性;n为偶数时判断所有数异或后的数是否为0,若为0,输出任意数;n为奇数时答案为所有数异或后的值#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;consti......
  • Codeforces Round 862 (Div. 2)A-C思路复盘
    感觉这场前三题都简单,复盘一下赛时的脑回路QAQ,c二分wa了四发赛后才过的血亏A题意:问是否能找到一个数x,有\(b_i=a_i⊕x\),使得\(b\)数组的总异或和为0。思路:赛时模拟样例可以发现先把a数组的总异或和求出来假设为x,然后由异或性质可知相同为0,不同为1,可知这个x可能就是答案。然......
  • ASEMI代理HMC717ALP3E原装ADI(亚德诺)车规级HMC717ALP3E
    编辑:llASEMI代理HMC717ALP3E原装ADI(亚德诺)车规级HMC717ALP3E型号:HMC717ALP3E品牌:ADI/亚德诺封装:QFN-16批号:2023+安装类型:表面贴装型引脚数量:16类型:车规级芯片主要功能HMC717ALP3E典型应用HMC717ALP3E非常适合:固定无线和LTE/WiMAX/4GBTS和基础设施中继器和毫微微小区公共安全广播接......
  • ASEMI代理HMC717ALP3E原装ADI(亚德诺)车规级HMC717ALP3E
    编辑:llASEMI代理HMC717ALP3E原装ADI(亚德诺)车规级HMC717ALP3E型号:HMC717ALP3E品牌:ADI/亚德诺封装:QFN-16批号:2023+安装类型:表面贴装型引脚数量:16类型:车规级芯片主要功能HMC717ALP3E典型应用HMC717ALP3E非常适合:固定无线和LTE/WiMAX/4GBTS和基础设施中继器和毫微微小......
  • Codeforces Round 861 (Div. 2)
    题目链接C核心思路这个思路说实话有点玄学,也就是我们前面的数位按照l或者r的相同数位来填补,后面就填相同的数字也就是比如l是2345我们可以是2999,2888,23111,23777.这样构造好像肯定是最小的。但是好好巩固下数位dp来做这道题还是更好的。#include<iostream>#include<cstr......
  • Codeforces Round 859 (Div. 4) ABCDE(交互题)FG1G2
    EFG1G2质量还挺好的A.PlusorMinushttps://codeforces.com/contest/1807/problem/A题目大意:给定a,b,c,问我们是a+b==c还是a-b==c?把正确的符号输出。input1112332129-7347112110336991899019-81910output+--++-++--+......
  • Codeforces Gym 103931F - Forest of Magic(时间轴分块+线段树合并)
    一个巨烦的时间轴分块做法,有点类似于P2137Gty的妹子树先考虑静态的情况。看上去就一脸线段树合并对吧?一次修改的操作对一个点\(x\)贡献可以写成\(k·dep_x+b\)的形式,开两棵线段树合并维护一次项和零次项系数即可。由于静态问题可做,因此考虑时间轴分块。设阈值\(B\),每\(B......
  • Codeforces Round 860 (Div. 2)
    Preface两三天没写题了小小的补一下题结果这场意外地很合胃口,1h不到就把A-E做完了,而且除了忘记初始化这种一眼丁真的错误好像也没写挂可惜当时懒了周日晚上就不打了(主要......
  • 【题解】Codeforces Round 861(CF1808)A - E1
    我忘记了今天有阳间CF,所以就开打的很晚,所以只是说一下做法,代码实现....还是算了吧。但是我也看了,我的思路其他的人都有写,所以这个做法正确性没问题。A.LuckyNumbers题......