Loading

题解 CF1324A 【Yet Another Tetris Problem】

\(Solution:\)

首先我们知道每一个数,在变化的时候都是只能+2,而2是个偶数,所以不会改变原数的奇偶性,所以我们只需要判断是否都是奇偶性相同的数,如果是就输出YES,不是就输出NO

\(\textbf{位运算:}\)

因为此体会涉及到位运算的知识,所以给大家普及一下。

  1. \(\&\)符号,\(x\&y\),会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如\(3(11)\&2(10)=2(10)\)
  2. \(|\)符号,\(x|y\),会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。例如\(3(11)|2(10)=3(11)\)
  3. 符号,xy,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。例如3(11)^2(10)=1(01)
  4. \(<<\)符号,左移操作,\(x<<2\),将\(x\)在二进制下的每一位向左移动两位,最右边用0填充,\(x<<2\)相当于让\(x\)乘以4。相应的,\(>>\)是右移操作,\(x>>1\)相当于给x/2,去掉\(x\)二进制下的最有一位。
  5. ~取反符号,可以将一个数的每一位都取反。

我们这里把位运算讲了一遍,但是真正用到的其实只有第一个 \(\&\) 符号

\(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;
}
posted @ 2020-04-08 15:47  ForeverOIer  阅读(175)  评论(0编辑  收藏  举报