POJ 1063 Flip and Shift

Posted pigba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1063 Flip and Shift相关的知识,希望对你有一定的参考价值。

题意:给你一个环,上面有一些0和1,你可以进行一些操作将隔着1个数的两个数交换位置,问能否使得0和1最终都是连着的

题解:首先可以发现两个0或两个1可以在这个环上随便动,其次0110或1001可以通过一次操作变为合法,而除了11 和 00外长度为2的序列只有01与10,所以统计01与10的个数,两两消去,最终只剩下1个01或10或不剩就说明合法。

#include<cstdio>
#include<algorithm>
using namespace std;
int T,cnt1,cnt2,n,x;
int main()
{
  scanf("%d",&T);
  while(T--)
    {
      scanf("%d",&n);
      int last=-1;
      cnt1=cnt2=0;
      for(int i=1;i<=n;i++)
    {
      scanf("%d",&x);
      if(last==-1) last=x;
      else
        {
          if(last==x)
        {
          last=-1;
          continue;
        }
          cnt1+=last;
          cnt2+=(!last);
          last=-1;
        }
    }
      if(n&1)
    {
      puts("YES");
      continue;
    }
      if(abs(cnt1-cnt2)<=1)puts("YES");
      else puts("NO");
    }
  return 0;
}

 

以上是关于POJ 1063 Flip and Shift的主要内容,如果未能解决你的问题,请参考以下文章

昂贵的聘礼,(最短路的应用),Poj(1063)

POJ 1753 Flip Game

POJ 1753 Flip Game

Flip Game / POJ 1753

POJ 1753 Flip Game

POJ1753 Flip Game(bfs枚举)