首先,分解題目,要滿足題目的要求,即相同顏色的小球要連在一起。這一點,我們可以分析出,黑色小球在奇數位置的數目,與在偶數位置的數目相差不過1.【-1,1】;
接下來,我們看兩種操作,flip操作,交換間隔為1的小球,從這裡可以看出,進行一次交換的時候,小球的相對位置,是不變的,比如1->3->5.
但是,當n為奇數的時候,不斷變換小球1,小球的位置最終會變成2.也就是,交換了小球的奇偶性。所以,這種情況下,是必然可以達到題目的要求(黑色小球在奇數位置的數目,與在偶數位置的數目相差不過1.【-1,1】;)在這裡,可能有人會有疑問,假設原來位置2的是黑色小球怎麼辦,因為我們知道,要改變奇偶位置,必然是(1)原來的偶數位置少一個或多個黑色的小球,那麼我們總有辦法,把黑色小球填補到那個欠缺的位置,然後再把原來的小球還原到2的位置。
當n為偶數的時候,我們知道,小球之間的相對位置是固定的,也就是說,奇偶性不能改變,這種情況下,當且僅當小球的位置滿足要求,才能達到目的。
下面,上代碼:
#include<iostream>
#include<string>
//#include<math.h>
using namespace std;
int _abs(int a)
{
if(a>=0)
return a;
else return -a;
}
int main()
{
int test;
cin>>test;
while(test--)
{
int n,blo=0,ble=0;
cin>>n;
int i;
for(i=1;i<=n;i++)
{
int tmp;
cin>>tmp;
if(tmp)
{
if(i%2)
blo++;
else
ble++;
}
}
if(n%2||(_abs(blo-ble)<=1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}