結果

問題 No.1654 Binary Compression
ユーザー chineristAC
提出日時 2021-08-20 23:27:48
言語 PyPy3
(7.3.15)
結果
MLE  
実行時間 -
コード長 1,075 bytes
コンパイル時間 210 ms
コンパイル使用メモリ 82,300 KB
実行使用メモリ 625,104 KB
最終ジャッジ日時 2024-10-14 07:14:43
合計ジャッジ時間 21,353 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 46 MLE * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

from itertools import groupby

mod = 924844033
 
s = input()
n = len(s)

if all(s[i]=="0" for i in range(n)):
    exit(print(n))

data = []
val = s[0]
cnt = 1
for i in range(1,n):
    if s[i]==val:
        cnt += 1
    else:
        data.append((val,cnt))
        val = s[i]
        cnt = 1
data.append((val,cnt))
Start = 1
End = 1
if data[0][0]=="0":
    Start+=data[0][1]
    data=data[1:]
if data[-1][0]=="0":
    End+=data[-1][1]
    data.pop()
 
n = len(data)
if n==1:
    print(data[0][1]*Start*End)
    exit()

stack = []
dp = data[0][1]
pre = 0

for i in range(2,n,2):
    j = -1
    while stack and data[stack[-1][0]][1]<data[i-1][1]:
        stack.pop()
    if stack:
        j,dpj,pj = stack[-1]
        pi = ((data[i-1][1]*dp % mod)+pj-(data[i-1][1]*dpj % mod))%mod
        stack.append((i-1,dp,pi))
        dpi = ((data[i][1]*pi % mod)+dp+data[i][1])%mod
        dp = dpi
    else:
        pi = data[i-1][1] * dp % mod
        stack.append((i-1,dp,pi))
        dpi = ((data[i][1]*pi % mod)+dp+data[i][1])%mod
        dp = dpi
        

print((dp*Start*End)%mod)
0