結果
| 問題 | No.3015 右に寄せろ! |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-01-25 13:44:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 688 ms / 2,000 ms |
| コード長 | 898 bytes |
| コンパイル時間 | 451 ms |
| コンパイル使用メモリ | 82,760 KB |
| 実行使用メモリ | 285,464 KB |
| 最終ジャッジ日時 | 2025-01-25 22:57:40 |
| 合計ジャッジ時間 | 6,816 ms |
|
ジャッジサーバーID (参考情報) |
judge11 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 36 |
ソースコード
def run_length_encoding(string):
rl=[["",0]]
for i in range(len(string)):
if string[i]==rl[-1][0]:
rl[-1][1]+=1
else:
rl.append([string[i],1])
return rl[1:]
def run_length_decoding(string):
st=[]
for i in string:
for j in range(i[1]):
st.append(i[0])
return "".join(st)
S=input()
#与えられた情報から、最終的な状態を構築する
L=run_length_encoding(S)+[["1",0],["1",0]]
for i in range(len(L)-2):
if L[i][0]=="1":
#偶数個あったら
if L[i][1]%2==0:
L[i+2][1]+=L[i][1]
L[i][1]=0
#奇数個あったら
else:
L[i+2][1]+=L[i][1]-1
L[i][1]=1
D=run_length_decoding(L)
#あとは差分を計算
def f(S):
a=0
for i in range(len(S)):
if S[i]=="1":
a+=i
return a
print((f(D)-f(S))//2)