zoj1028-Flip and Shift

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=28

题意:有相互交叉的黑白两种颜色的小球,每一个小球每次可以跳两格;问你是否可以将同种颜色的小球移动到连续的位置上去;

分析:

A、当球的总数是奇数的时候,无论怎么移动,均能使小球移动到满足的位置;

B、当球的总数是偶数的时候,当处于奇数与偶数位置上的某一种颜色的球的差值小于2时,也能移动到满足的位置,否则不能。

 

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

#include<algorithm>

#include<bitset>



using namespace std;



int main()

{

	int Case , flag , n , num[ 50 ] , eve , odd ;

	cin >> Case ;

	while( Case-- )

	{

		cin >> n ;

		eve = odd = 0 ;

		for( int i = 1 ; i <= n ; ++i )

		{

			cin >> num[ i ] ;

			if( i % 2 == 0  )

				eve += num[ i ] ;

			else

				odd += num[ i ] ;

		}

		if( n % 2 == 1  )

			flag = 1 ;

		else if( odd == eve || abs( odd - eve ) == 1 )

			flag = 1 ;

		else

			flag = 0 ;

		if( flag )

			cout << "YES" << endl ;

		else 

			cout << "NO" <<endl ;

	}		 

	return 0 ;

}


 

 

你可能感兴趣的:(ZOJ)