题意:给你一个环,上面有一些0和1,你可以进行一些操作将隔着1个数的两个数交换位置,问能否使得0和1最终都是连着的
题解:首先可以发现两个0或两个1可以在这个环上随便动,其次0110或1001可以通过一次操作变为合法,而除了11 和 00外长度为2的序列只有01与10,所以统计01与10的个数,两两消去,最终只剩下1个01或10或不剩就说明合法。
#include#include 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;}