結果
問題 |
No.2106 Wild Cacco
|
ユーザー |
![]() |
提出日時 | 2025-06-12 15:56:42 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,777 bytes |
コンパイル時間 | 265 ms |
コンパイル使用メモリ | 82,728 KB |
実行使用メモリ | 270,624 KB |
最終ジャッジ日時 | 2025-06-12 15:56:47 |
合計ジャッジ時間 | 4,429 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 7 TLE * 1 -- * 22 |
ソースコード
MOD = 998244353 s = input().strip() n = len(s) from collections import defaultdict # Initialize DP with the starting state (balance 0, count 1) dp = defaultdict(int) dp[(0, 0)] = 1 for i in range(n): new_dp = defaultdict(int) current_char = s[i] for (lo_prev, hi_prev), cnt in dp.items(): if current_char == '.': # Replace with '(' new_lo = lo_prev + 1 new_hi = hi_prev + 1 new_dp[(new_lo, new_hi)] = (new_dp[(new_lo, new_hi)] + cnt) % MOD # Replace with ')' new_lo_r = max(lo_prev - 1, 0) new_hi_r = hi_prev - 1 if new_hi_r >= 0: new_dp[(new_lo_r, new_hi_r)] = (new_dp[(new_lo_r, new_hi_r)] + cnt) % MOD # Replace with '?' new_lo_q = max(lo_prev - 1, 0) new_hi_q = hi_prev + 1 new_dp[(new_lo_q, new_hi_q)] = (new_dp[(new_lo_q, new_hi_q)] + cnt) % MOD else: if current_char == '(': new_lo = lo_prev + 1 new_hi = hi_prev + 1 new_dp[(new_lo, new_hi)] = (new_dp[(new_lo, new_hi)] + cnt) % MOD elif current_char == ')': new_lo = max(lo_prev - 1, 0) new_hi = hi_prev - 1 if new_hi >= 0: new_dp[(new_lo, new_hi)] = (new_dp[(new_lo, new_hi)] + cnt) % MOD else: # current_char is '?' new_lo = max(lo_prev - 1, 0) new_hi = hi_prev + 1 new_dp[(new_lo, new_hi)] = (new_dp[(new_lo, new_hi)] + cnt) % MOD dp = new_dp result = 0 if n % 2 != 0: print(0) else: for (lo, hi), cnt in dp.items(): if lo <= 0 <= hi: result = (result + cnt) % MOD print(result % MOD)