https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_ba
ある状態について、次の状態が全て必勝ならその状態は必敗、次の状態に一つでも必敗があれば必勝です。
1は必敗、2は次の状態の1が必敗なので必勝、3は次の状態の2が必勝なので必敗、4~6は次の状態に3が含まれているので必勝、7は次の状態が4~6なので必敗、8~14は次の状態に7が含まれているので必勝、15は次の状態が8~14なので必敗、と考えていくと、2進法で全ての桁が1のときに必敗、そうでないときは必勝であることが分かります。
// Stones Game 2 #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwrap() } //////////////////// process //////////////////// fn is_one_only(N: u64) -> bool { if N == 1 { true } else if N % 2 == 0 { false } else { is_one_only(N >> 1) } } fn f(N: u64) { if is_one_only(N) { println!("Second") } else { println!("First") } } fn main() { let N = read(); f(N) }