poj 1063 Flip and Shift

来源:互联网 发布:迅雷影音mac 编辑:程序博客网 时间:2024/05/27 09:45
 

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

题目分析:这道题目其实就是道数学的简单分析题,意思就是循环的数组中0和1可以旋转,其实每次旋转就是只能移动两个位置而已,理解题意之后不难得到以下结论:

1.如果是奇数,那么一定是‘YES’
2.如果是偶数,则统计在奇数位上和偶数位上白棋的个数,如果他们相差小于2,那么也一定是'YES'。
代码如下:

Source CodeProblem: 1063  User: 1481863291 Memory: 168K  Time: 0MS Language: C++  Result: Accepted Source Code #include<cmath>#include<cstdio>int main(){int i,k,t,r,res,cnt,ans;scanf("%d",&t);while(t--){scanf("%d",&k);res=cnt=0;ans=k%2;for(i=0;i<k;i++){scanf("%d",&r);if(ans)continue;if(r==0){if(i%2)cnt++;elseres++;}}if(ans||abs(cnt-res)<=1)printf("YES\n");elseprintf("NO\n");}return 0;}


 

原创粉丝点击