首页 > 其他 > 详细

POJ 1063 Flip and Shift

时间:2018-05-04 13:32:07      阅读:189      评论:0      收藏:0      [点我收藏+]

题意:给你一个环,上面有一些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

原文:https://www.cnblogs.com/pigba/p/8989789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!