E - Lucky 7 Battle Editorial by kyopro_friends
\(N-1\) ラウンド目が終了した時点で高橋君に勝ち目があるかを考えてみましょう。この時点での \(T\) を \(10\) 進法の数とみなし \(7\) で割ったあまりを \(r\) とします。また、文字 \(S_N\) を数と同一視します。
\(X_N\) が T
のとき、\(10r\) か \(10r+S_N\) のどちらかが \(7\) の倍数であれば高橋君の勝ちです。
\(X_N\) が A
のとき、\(10r\) と \(10r+S_N\) がともに \(7\) の倍数であれば高橋君の勝ちです。
このように、後ろから考えることで、次のようなDPができることがわかります。
dp[i]=次の条件を満たす数 \(r\) の集合
条件: \(i\) ラウンド目が終了した時点で、\(T\) を \(7\) で割ったあまりが \(r\) であるとき、ここからゲームを続けると高橋君が勝つ
初期状態は \( dp[N]=\{0\}\) であり、遷移は
\(X_i\) が T
のとき \(dp[i-1]=\{ r \mid (10r \bmod 7) \in dp[i] \ \text{または}\ (10r+S_i \bmod 7) \in dp[i]\}\)
\(X_i\) が A
のとき \(dp[i-1]=\{ r \mid (10r \bmod 7) \in dp[i]\ \text{ かつ}\ (10r+S_i \bmod 7) \in dp[i]\}\)
となります。
最終的に \(0 \in dp[0]\) なら高橋君の勝ち、そうでなければ青木君の勝ちです。計算量は \(O(N)\) です。
posted:
last update: