結果
問題 |
No.1766 Tatsujin Remix
|
ユーザー |
|
提出日時 | 2025-06-14 19:48:18 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 620 ms / 2,000 ms |
コード長 | 3,627 bytes |
コンパイル時間 | 446 ms |
コンパイル使用メモリ | 82,380 KB |
実行使用メモリ | 78,504 KB |
最終ジャッジ日時 | 2025-06-14 19:48:26 |
合計ジャッジ時間 | 6,602 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 22 |
ソースコード
## https://yukicoder.me/problems/no/1766 MOD = 998244353 def main(): N = int(input()) S = [] for _ in range(N): S.append(input()) S = "".join(S) # 初期設定 dp = {} for w0 in [".", "d", "k"]: if S[0] != ".": if w0 != S[0]: continue for w1 in [".", "d", "k"]: if S[1] != ".": if w1 != S[1]: continue w = w0 + w1 dp[w] = 1 else: w = w0 + w1 dp[w] = 1 else: if w0 == ".": if S[1] == ".": dp[".."] = 1 else: for w1 in [".", "d", "k"]: if S[1] != ".": if w1 != S[1]: continue w = w0 + w1 dp[w] = 1 else: w = w0 + w1 dp[w] = 1 if S[0] == "." and S[1] != ".": new_dp = {} for key, value in dp.items(): if key[0] == S[1]: continue new_dp[key] = value dp = new_dp for i in range(2, len(S)): new_dp = {} if S[i] != ".": if S[i - 1] != ".": for key, value in dp.items(): if S[i - 1] == key[1]: new_key = key[1] + S[i] if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += value new_dp[new_key] %= MOD else: for key, value in dp.items(): if key[1] == S[i]: continue if key[1] == "." and (i % 2 == 1): continue new_key = key[1] + S[i] if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += value new_dp[new_key] %= MOD else: if i % 2 == 0: # 奇数番号 for key, value in dp.items(): for w in [".", "d", "k"]: if w == "." and key[1] != "." : continue new_key = key[1] + w if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += value new_dp[new_key] %= MOD else: # 偶数番号 for key, value in dp.items(): if key in ("d.", "k."): continue elif key == "..": new_key = ".." if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += value new_dp[new_key] %= MOD else: for w in [".", "d", "k"]: new_key = key[1] + w if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += value new_dp[new_key] %= MOD dp = new_dp answer = 0 for value in dp.values(): answer += value answer %= MOD print(answer) if __name__ == "__main__": main()