二人の選手は、n個のヒープからキャンディーを選んで、最後の1はそれぞれ、彼らが作る.TO同じヒープ(何のお菓子を選んでいないが許可されていない)から来るキャンディーの任意の数を選ぶことができ回しgame.Onを勝つピックプレイヤーを交代しますゲームより面白い、プレイヤーはそれらのそれぞれがミスをしたことがない場合は、ゲームを勝つどのプレーヤー見つけるoperation.Please代わりにピッキングの3つの小さな山(なし空のヒープ)に1つのヒープを分離することができます。
入力
Intputは、複数のテストケースが含まれています。最初の行は整数
1 ≤ T 、テストケースの数。各ケースは、ヒープの数を示し、整数nで始まり、次の行がNの整数含まSを[ 0 ] 、S [ 1 ] 、。。。。、S [ N - 1 ]とヒープを表すSを[ 0 ] 、S [ 1 ] 、。。。、S [N - 1 ]それぞれのオブジェクト。(1≤N≤106、1つの≤ S [ I ] ≤ 10 9 )
出力
各テストケースの場合、出力のいずれかが含まれwhickライン「最初のプレーヤーの勝利を。」または「第2選手が勝ちます」。
サンプル入力
2 2 4 4 3 1 2 4
サンプル出力
第二のプレイヤーが勝ちます。まず、プレイヤーが勝ちます。
著者
UESTC
ソース
推薦します
#include <iostreamの> する#include <stdio.hに> する#include <アルゴリズム> する#include < 文字列・H> の#include <ベクトル> 使用して 名前空間STD。 typedefの長い 長いLL。 // ボイドgetsg(INT X){ // のmemset(VIS、0、はsizeof(VIS))。 // ため(INT i = 0; iは<X、iは++){ // VIS [SGの[I] = 1。 // } // ため(INT I1 = 1、I1 <X、I1 ++){ // ため(INT I2 = 1、I2 <X、I2 ++){ // (int型I3 = 1、I3 <X、I3 ++)のために{ // もし(I1 + I2 + I3 == X)VIS [SG [I1] ^ SG [I2] ^ SG [I3] = 1。 // } // } // } // ための式(I = 0をint型;; iが++){ // もし(VIS [I] == 0){ // SG [X] = I。 // ブレーク; // } // } // } INT メイン(){ // ため(INT I = 1; I = 50 <; iは++){ // getsg(I)。 // のprintf( "I:%D%D%D \ n"は、I、SG [I]、SG [I] == I)。 // } int型トンを。 scanf関数(" %のD "、&T)。 一方、(t-- ){ int型N。 scanf関数(" %のD "、&N) int型 ANS = 0 ; int型のTEM; 以下のために(int型 i = 1 ; iが++; iが<= N ){ scanf関数(" %のD "、およびTEM)。 もし(TEMの%8 == 0)tem-- 。 それ以外の 場合(TEM%8 == 7)TEM ++ ; 年 =年^ TEM; } もし(ANS == 0)のprintf(" 第2選手の勝利\ N " ); 他のprintf(" 最初のプレーヤーが勝利する\ n " ); } }