結果
問題 | No.3144 Parentheses Modification and Rotation (01 Ver.) |
ユーザー |
|
提出日時 | 2025-05-16 22:27:56 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 175 ms / 2,000 ms |
コード長 | 1,572 bytes |
コンパイル時間 | 443 ms |
コンパイル使用メモリ | 82,740 KB |
実行使用メモリ | 154,116 KB |
最終ジャッジ日時 | 2025-06-26 20:47:00 |
合計ジャッジ時間 | 6,076 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
import sys input = lambda : sys.stdin.readline().strip() ni = lambda : int(input()) na = lambda : list(map(int, input().split())) yes = lambda : print("yes"); Yes = lambda : print("Yes"); YES = lambda : print("YES") no = lambda : print("no"); No = lambda : print("No"); NO = lambda : print("NO") class SparseTable(): ''' 更新がないかつ冪等性が成り立つ場合 ''' def __init__(self, arr: list, op: callable=min) -> None: n = len(arr) h = n.bit_length() self.table = [[0] * n for _ in range(h)] self.table[0] = arr[::] for k in range(1, h): t, p = self.table[k], self.table[k - 1] l = 1 << (k - 1) for i in range(n - l * 2 + 1): t[i] = op(p[i], p[i + l]) self.op = op def query(self, l: int, r: int) -> int: k = (r - l).bit_length() - 1 return self.op(self.table[k][l], self.table[k][r - (1 << k)]) def solve(s): n = len(s) s = [0] + s + s for i in range(n*2): s[i+1] += s[i] sp = SparseTable(s) ans = [] for i in range(n+1): ans.append(s[i] - sp.query(i, i + n + 1)) return ans n = ni() s = [[-1, 1][x=="("] for x in input()] if n % 2 == 1: print(-1) exit() r, m = na() # 置き換えての最初コストは左から見たpresumのmin+右から見たpresumのmin A = solve(s) B = solve([-x for x in s[::-1]]) C = [(A[i] + 1)//2 + (B[-1-i] + 1)//2 for i in range(n+1)] # print(A) # print(B) ans = 10 ** 18 for i in range(n): ans = min(ans, C[-1-i] * m + i * r) print(ans)