結果
| 問題 |
No.3147 Parentheses Modification and Rotation (RM Ver.)
|
| コンテスト | |
| ユーザー |
naniwazu
|
| 提出日時 | 2025-05-14 04:44:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 2,000 ms |
| コード長 | 949 bytes |
| コンパイル時間 | 508 ms |
| コンパイル使用メモリ | 82,600 KB |
| 実行使用メモリ | 80,384 KB |
| 最終ジャッジ日時 | 2025-05-14 04:44:07 |
| 合計ジャッジ時間 | 4,186 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 33 |
ソースコード
from collections import defaultdict
N = int(input())
if N % 2 != 0:
print(-1)
exit()
S = input()
R, M = map(int, input().split())
accum = [0] + [1 if s == "(" else -1 for s in S] * 2
for i in range(2 * N):
accum[i + 1] += accum[i]
count = defaultdict(int)
range_min = 0
for i in range(N + 1):
count[accum[i]] += 1
range_min = min(range_min, accum[i])
ans = float("inf")
for i in range(N):
rotation_cost = (N - i) % N * R
accum_left = accum[i]
accum_right = accum[i + N]
close_to_open_required = (accum_left - range_min + 1) // 2
open_to_close_required = (accum_right - range_min + 1) // 2
modification_cost = (close_to_open_required + open_to_close_required) * M
ans = min(ans, rotation_cost + modification_cost)
count[accum[i]] -= 1
count[accum[i + N + 1]] += 1
if count[range_min - 1] > 0:
range_min -= 1
elif count[range_min] == 0:
range_min += 1
print(ans)
naniwazu