結果
| 問題 |
No.1654 Binary Compression
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
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)