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