1. 程式人生 > >1028 Flip and Shift (思維題)

1028 Flip and Shift (思維題)

思路:當球球總數是奇數的時候,某個球是可以通過有限次轉換到任何地方的,也就是說無論如何都可以擺成想要的樣子。

當球球總數是偶數的時候,由於是和+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;
}