• 「CF1324A Yet Another Tetris Problem」


    闲得无聊,发个位运算版题解,谔谔

    题目大意

    给出一个序列 (a),每次操作可以在任何一个元素加上 (2),问最后是否可以使得所有元素相等.

    分析

    可以发现最大值 (-) 当前位置要是一个偶数,那么再理解一下就是所有元素的奇偶性相同,那么可以维护一个 (and) 和,以及一个 (or) 和,最后看二进制最后一位就好了.

    代码

    #include<bits/stdc++.h>
    #define REP(i,first,last) for(int i=first;i<=last;++i)
    #define DOW(i,first,last) for(int i=first;i>=last;--i)
    using namespace std;
    int T,N;
    void YES()
    {
    	printf("YES
    ");
    }
    void NO()
    {
    	printf("NO
    ");
    }
    void work()
    {
    	scanf("%d",&N);
    	int and_=1,or_=0;//记录and和以及or和,初值为1和0
    	int a;
    	REP(i,1,N)
    	{
    		scanf("%d",&a);
    		and_&=a&1;//因为用到的知识奇偶性所以可以直接在a上and1
    		or_|=a&1;
    	}
    	if(and_||or_^1)//如果and最后为1(全是奇数),或者or最后为0(全是偶数),则输出YES
    	{
    		YES();
    		return;
    	}
    	NO();//否则不成立
    }
    int main()
    {
    	scanf("%d",&T);
    	REP(i,1,T)
    	{
    		work();
    	}
    	return 0;
    }
    
  • 相关阅读:
    MySQL表操作:字段类型 约束条件
    MySQL安装 sql语句
    O学堂作文
    iOS沙盒
    xcode 8带来的问题
    身份证号验证(省份,生日,末位校验)
    UIView的layoutSubviews和drawRect方法何时调用
    UIView超出父视图部分响应
    xcode 8带来的问题
    计算今天是周几
  • 原文地址:https://www.cnblogs.com/Sxy_Limit/p/12484240.html
Copyright © 2020-2023  润新知