(Solution:)
首先我们知道每一个数,在变化的时候都是只能+2,而2是个偶数,所以不会改变原数的奇偶性,所以我们只需要判断是否都是奇偶性相同的数,如果是就输出YES,不是就输出NO
( extbf{位运算:})
因为此体会涉及到位运算的知识,所以给大家普及一下。
- (&)符号,(x&y),会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如(3(11)&2(10)=2(10))
- (|)符号,(x|y),会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。例如(3(11)|2(10)=3(11))
- 符号,xy,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。例如3(11)^2(10)=1(01)
- (<<)符号,左移操作,(x<<2),将(x)在二进制下的每一位向左移动两位,最右边用0填充,(x<<2)相当于让(x)乘以4。相应的,(>>)是右移操作,(x>>1)相当于给x/2,去掉(x)二进制下的最有一位。
- ~取反符号,可以将一个数的每一位都取反。
我们这里把位运算讲了一遍,但是真正用到的其实只有第一个 (&) 符号
(code:)
#include<bits/stdc++.h>//万能头文件
using namespace std;//标准数据库
inline int read()//快速读入
{
int x=0;bool f=true;char c=getchar();
if(c==EOF) return 0;
while(c<'0' || c>'9'){if(c=='-') f=false;c=getchar();}
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return f?x:-x;
}
int T,n,x,a;
bool f;
int main()
{
T=read();//输入数据组数
while(T--)
{
f=1;//初始化
n=read();//输入一共有多少数
x=read();//将第一个数输入进来当做基准数
for(int i=1;i<n;i++)
{
a=read();//输入以后的每个数
if((a&1)!=(x&1)) f=0;//如果奇偶性不同,就将 f 置0
}
puts(f?"YES":"NO");//如果 f 为真就输出 YES 要不然就输出 NO
}
return 0;
}