zoukankan      html  css  js  c++  java
  • 「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;
    }
    
  • 相关阅读:
    洛谷 P4484
    洛谷 P4900
    Codeforces 1500D
    Codeforces 1322D
    2021.9.30 Codeforces 中档题四道
    BZOJ 3729
    洛谷 P6276
    Codeforces 1511G
    C语言 typedef
    C语言 回调函数 callback
  • 原文地址:https://www.cnblogs.com/Sxy_Limit/p/12484240.html
Copyright © 2011-2022 走看看