Mahmoud and Ehab and the even-odd game [ Codeforces Round #473 (Div. 2) A ]
問題
最初、Mahmoud が整数 n を持っている。Mahmoud と Ehab は、以下の操作をおこなってから n を相手に渡す。
・Mahmoud は偶数、Ehab は奇数の数 a (1<=a<=n) を選んで、n から引く
この操作をおこなえなかったとき、その人はゲームに負ける。
最終的にこのゲームで勝つのは Mahmoud,Ehab のどちらか。
考察
最初に n を持っているのは Mahmoud です。
このとき、n が偶数であれば、a=n を選んで、0 を Ehab に投げつけ、勝利することができます。
逆に、n が奇数の場合はどうでしょうか。
このとき、Mahmoud が選ぶことのできる a の範囲は 2<=a<=n-1 です。
Mahmoud はこのうちどれを選んでも、奇数を Ehab に投げることになってしまいます。
Ehab が受け取ることになる奇数 o の範囲は 1<=o<=n-2 です。Ehab はここから a=o とすることで 0 をMahmoud に投げることができ、勝利することができます。
よって、最初の n が偶数なら Madmoud の勝ち、奇数なら Ehab の勝ちになります。
唯一の例外として n=1(Mahmoudが最初から敗北している)がありますが、奇数なら Ehab が勝つというプログラムにしてしまえば、この例外も含めて上手く処理することができます。
コード
void solve (FastScanner in, PrintWriter out) { out.println(in.nextInt()%2==0? "Mahmoud" : "Ehab"); }