3546 - 杰克的序列
今天杰克将遇到一个长度为n的序列A. 在杰克的世界观里,如果一个序列是好的,当且仅当这个序列的奇数位置上数的和等于偶数位置上数的和并且这个序列不回文. 回文的意思是,一个序列从前往后读与从后往前读是一样的. 两个序列A和B被认为不同当且仅当两个序列的长度不同或者存在某个位置i满足Ai≠Bi. 现在,请你判断给定的序列是不是一个好的序列.
Input
第一行有一个整数T,表示测试组数. 每组测试数据有两行,第一行是一个整数n,表示序列的长度,第二行是n个整数A1,A2...An. 数据范围 1 <= T <= 100 1 <= n <= 1000
0 <= Ai<= 1000000
Output
对于每组测试数据输出一行,如果这个序列是好的,输出"Yes",否则输出"No".
Examples
Input
3 7 1 2 3 4 5 6 7 7 1 2 3 5 4 7 6 6 1 2 3 3 2 1
Output
No Yes No
Solution C++
#include <stdio.h> #include <iostream> using namespace std ; class Jack { public: void play() ; protected: int a[ 1005 ] , t , n , s1 , s2 ; }; void Jack::play() { //freopen( "out.txt" , "w" , stdout ) ; cin >> t ; while( t-- ) { s1 = s2 = 0 ; cin >> n ; for( int i = 1 ; i <= n ; i++ ) { scanf( "%d" , &a[ i ] ) ; if( i % 2 ) s1 += a[ i ] ; else s2 += a[ i ] ; } if( s1 != s2 ) { cout << "No\n" ; continue ; } int ok = 0 ; for( int i = 1 ; i <= n / 2 ; i++ ) if( a[ i ] != a[ n - i + 1 ] ) { ok = 1 ; break ; } if( !ok ) cout << "No\n" ; else cout << "Yes\n" ; } } int main() { Jack jack ; jack.play() ; return 0 ; }