結果
問題 |
No.2219 Re:010
|
ユーザー |
![]() |
提出日時 | 2023-02-17 23:43:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 275 ms / 2,000 ms |
コード長 | 682 bytes |
コンパイル時間 | 206 ms |
コンパイル使用メモリ | 82,632 KB |
実行使用メモリ | 115,456 KB |
最終ジャッジ日時 | 2024-07-19 14:53:02 |
合計ジャッジ時間 | 4,781 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
import itertools S = list(input()) Q = [0]*len(S) Z = [0]*len(S) mod = 998244353 for i,s in enumerate(S): if s=='0': Z[i]=1 if s=='?': Q[i]=1 ZAC = list(itertools.accumulate(Z)) QAC = list(itertools.accumulate(Q)) ans = 0 def modinv(a): return pow(a, mod-2, mod) div2 = modinv(2) for i,s in enumerate(S): if i==0 or i==len(S)-1: continue if s=='1' or s=='?': leftZ = ZAC[i-1] leftQ = QAC[i-1] rightZ = ZAC[-1]-ZAC[i] rightQ = QAC[-1]-QAC[i] left = (pow(2,leftQ,mod)*(leftZ+leftQ*div2))%mod right = (pow(2,rightQ,mod)*(rightZ+rightQ*div2))%mod ans = (ans+left*right)%mod print(ans)