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的主要内容,如果未能解决你的问题,请参考以下文章