[yukicoder] No. 8 N言っちゃダメゲーム
問題
方針
\( K \geq N – 1 \) のときは先手必勝です。最終的に \( N – 1 \) を言うことができれば勝ちです。ここで、後手が言うことができる数字を考えます。先手がどのような数字を言ったとしても、\( n \) を自然数として、\( n(K + 1) \) を後手は必ず言うことができます。つまり、先手が加算した値を \( a + 1\) とすると、後手は \( K – a \) を加算した値を言うことで達成できます。したがって、\( (N – 1) \bmod (K + 1) = 0 \) であれば後手が必勝です。
一方で、\( (N – 1) \bmod (K + 1) \neq 0 \) のとき、先手は、\( (n – 1)(K + 1) + (N – 1) \bmod (K + 1) \) と言うことができます。また、\( (n – 1)(K + 1) + (N – 1) \bmod (K + 1) = N – 1\) となる \( n \) が存在するので、先手が必勝です。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int P; cin >> P; int N, K; for (int i = 0; i < P; i++) { cin >> N >> K; if (K >= N - 1) { cout << "Win\n"; } else { if ((N - 1) % (K + 1) != 0) { cout << "Win\n"; } else { cout << "Lose\n"; } } } return 0; }
感想
こういう問題苦手です。
ディスカッション
コメント一覧
まだ、コメントがありません