結果
問題 | No.3017 交互浴 |
ユーザー |
|
提出日時 | 2025-02-03 12:23:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 243 ms / 2,000 ms |
コード長 | 1,487 bytes |
コンパイル時間 | 2,834 ms |
コンパイル使用メモリ | 82,096 KB |
実行使用メモリ | 107,128 KB |
最終ジャッジ日時 | 2025-02-03 12:24:09 |
合計ジャッジ時間 | 19,738 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 55 |
ソースコード
N = int(input())A = list(map(int, input().split()))ans = 0 # 水色のマスの個数LIFO = []LIFO.append(["B", A[0]])ans += A[0]print(ans)for i in range(1, N):new_L = A[i]if i % 2 == 0:new_color = "B"else:new_color = "G"del_cnt = 0 # 末端から削除したマスの個数# 末端からnew_L個を削除する (そもそもnew_L個無い可能性にも注意!)while True:if not LIFO:breakend_color, end_L = LIFO.pop()if del_cnt + end_L == new_L:del_cnt += end_Lif end_color == "B":ans -= end_Lbreakelif del_cnt + end_L < new_L:del_cnt += end_Lif end_color == "B":ans -= end_Lelif del_cnt + end_L > new_L: # 消しすぎLIFO.append([end_color, end_L - (new_L - del_cnt)])if end_color == "B":ans -= (new_L - del_cnt)del_cnt += (new_L - del_cnt)break# 新しいものを末端に追加if LIFO:if LIFO[-1][0] == new_color:LIFO[-1][1] += new_Lelse:LIFO.append([new_color, new_L])else:LIFO.append([new_color, new_L])if new_color == "B":ans += new_Lprint(ans)