文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Mahmoud and Ehab and the even-odd game [ Codeforces Round #473 (Div. 2) A ]

codeforces.com


問題

最初、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");
	
}