結果
問題 |
No.2106 Wild Cacco
|
ユーザー |
![]() |
提出日時 | 2025-06-12 15:57:08 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,733 bytes |
コンパイル時間 | 142 ms |
コンパイル使用メモリ | 82,248 KB |
実行使用メモリ | 279,904 KB |
最終ジャッジ日時 | 2025-06-12 15:57:37 |
合計ジャッジ時間 | 4,488 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 7 TLE * 1 -- * 22 |
ソースコード
MOD = 998244353 s = input().strip() n = len(s) if n % 2 != 0: print(0) exit() from collections import defaultdict dp = defaultdict(int) dp[(0, 0)] = 1 for c in s: new_dp = defaultdict(int) for (lo_prev, hi_prev), cnt in dp.items(): if c == '.': # Try replacing with '(' new_lo = lo_prev + 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD # Try replacing with ')' new_lo = lo_prev - 1 new_hi = hi_prev - 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD # Try replacing with '?' new_lo = lo_prev - 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD else: if c == '(': new_lo = lo_prev + 1 new_hi = hi_prev + 1 elif c == ')': new_lo = lo_prev - 1 new_hi = hi_prev - 1 else: # '?' new_lo = lo_prev - 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD dp = new_dp total = 0 for (lo, hi), cnt in dp.items(): if lo <= 0 <= hi: total = (total + cnt) % MOD print(total)