传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1028
思路:当球球总数是奇数的时候,某个球是可以通过有限次转换到任何地方的,也就是说无论如何都可以摆成想要的样子。
当球球总数是偶数的时候,由于是和+2位置的球球交换,所以会一半的位置是到不了的,所以会出现不行的情况。那么这种情况怎么求呢?看奇数位置和偶数位置上黑球个数。如果二者之差的绝对值<=1,那么肯定是可以摆成的,不然就不行啦。
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
int n;
int a[33];
int main()
{
scanf("%d",&n);
while(n--)
{
int x;
scanf("%d",&x);
int a=0,b=0;
for(int i=1;i<=x;i++)
{
int tmp;
scanf("%d",&tmp);
if(tmp==1)
{
if(i%2)
{
a++;
}
else
{
b++;
}
}
}
if(abs(a-b)<=1||x%2)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}