ARC 185

Table of Contents

A - mod M Game 2

解説 AC だが、かなり解像度が低い。

$\displaystyle \sum_{k=1}^{N} k = \frac{1}{2}N(N+1)$ より両者のカードの総和は $N(N+1)$。 最後の Bob の出す手が $b$ のとき Alice が最後に出した手までの総和は $N(N+1) - b$。 $N(N+1) - b$ が $0$ にできたら Bob の勝ち、それ以外のときは Alice の勝ち。

\begin{align} N(N+1) - b &\equiv 0 \mod M \\ N(N+1) &\equiv b \mod M \\ \end{align}

$b \in [1,N]$ より、$1 \leq (N(N+1) \mod M) \leq N$ のときは Bob の勝ち。それ以外のときは Alice の勝ち

void solve() {
    ll T;
    cin >> T;
    rep(_, T) {
        ll N, M;
        cin >> N >> M;

        ll x = N * (N + 1) % M;
        string ans = "Alice";
        if (clamp(x, 1LL, N) == x) {
            ans = "Bob";
        }
        cout << ans << endl;
    }
}