POJ 1063

题目大意:本题就是给出一个循环队列,队列中的元素只能是1和0,现在我们有两种旋转方法,就是连选三个我可以选择顺时针旋转或者是逆时针旋转,当然,旋转之后的结果我们很容易就知道了就是把一个元素移动两格,中间的元素位置不变。最后要求最后我是否有办法使所有的1在一起,所有的0在一起.

 1 #include<cmath>

 2 #include<cstdio>

 3 int main()

 4 {

 5     int i,k,t,r,res,cnt,ans;

 6     scanf("%d",&t);

 7     while(t--)

 8     {

 9         scanf("%d",&k);

10         res=cnt=0;

11         ans=k%2;

12         for(i=0;i<k;i++)

13         {

14             scanf("%d",&r);

15             if(ans)

16                 continue;//不可直接break,还需要完成输入 

17             if(r==0)

18             {

19                 if(i%2)

20                     cnt++;

21                 else

22                     res++;

23             }

24         }

25         if(ans||abs(cnt-res)<=1)

26             printf("YES\n");

27         else

28             printf("NO\n");

29     }

30     return 0;

31 }

 

你可能感兴趣的:(poj)