fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. /*
  5. 解説1
  6. 元々のゲーム
  7. mod 4上のNimになる
  8. 自順で(0, 0, 0, 0)にできれば
  9. 相手順ではどこかが0ではなくなる
  10. そこを0に戻すってことを繰り返せばいつかは元々のゲームでの(0, 0, 0, 0)に到達できる
  11. mod 4上のNimは普通のNim + 増やす手が存在するゲームと見ることができる
  12. - 最初それぞれの山には0個~3個の石がある
  13. - 石を増やす場合最大3個になるまで増やすことができる
  14. - 石を増やす手というのは有限回しか使えない
  15. まず増やす手をいっさい使わない普通のNimの場合を考えてみて、仮にtaroが勝ったとする。
  16. 増やす手を使ってもいいゲームでjiroが石を増やす手を打ってきたらtaroは石の数を元に戻す(増えた分減らす)という戦略を取る
  17. するとこの一連の2手は勝敗とは関係なくなる
  18. 勝敗はそれ以外の普通のNimのゲーム展開で決まるのでtaroの勝ちとなる
  19. つまり 石のmod4 でNimをやって勝ったほうが元々のゲームでの勝者
  20.  
  21. 解説2
  22. grundy数がどうなるか考えてみます
  23. N | 0 1 2 3 4 5 6 7 8
  24. g | 0 1 2 3 0 1 2 3 0
  25. って感じになります。これはN % 4と等しいです
  26. */
  27.  
  28. int main() {
  29. int res = 0;
  30. for(int i=0;i<4;i++){
  31. int N;
  32. cin >> N;
  33.  
  34. res ^= N % 4;
  35. }
  36.  
  37. if(res == 0){
  38. cout << "Jiro" << endl;
  39. } else {
  40. cout << "Taro" << endl;
  41. }
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0s 3300KB
stdin
3 6 12 4
stdout
Taro