0w1

Yuki 102 トランプを奪え ( Game Theory, SG Value )

No.102 トランプを奪え - yukicoder

題意:
四種花色堆四疊,每疊張數 1 至 13 張,輪流操作玩一場遊戲。一次操作需選擇一疊,並抽走 1 至 3 張,納入自己的手牌。若取得了該疊最後一張,就能奪走對手的手牌,使對手手排只剩原本的一半,向下取整。張數多的贏,求雙方最佳策略下,先手或後手贏,或是平手。

解法:
想一下就會發現,只要奪走對手手排,當下一定自己的手牌會大於對手。因此其實是抽到最後一張牌的人才是唯一贏家。算一下 SG Value 後,依據 Nim 性質,求 XOR 判斷是否為 0 便能得知先手勝敗。

時間 / 空間複雜度:
O( 1 )

int N1, N2, N3, N4;

void init(){
  cin >> N1 >> N2 >> N3 >> N4;
}

void solve(){
  int gv = ( N1 % 4 ) ^ ( N2 % 4 ) ^ ( N3 % 4 ) ^ ( N4 % 4 );
  if( gv == 0 )
    cout << "Jiro" << endl;
  else
    cout << "Taro" << endl;
}