Skip to content

Commit bdd3ffa

Browse files
committed
feat(codeforces): add MainPlus solution for p2190B1
1 parent 874a138 commit bdd3ffa

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// gpt
2+
package com.lzw.solutions.codeforces.p2190B1;
3+
4+
import java.io.BufferedReader;
5+
import java.io.InputStreamReader;
6+
7+
public class MainPlus {
8+
public static void main(String[] args) throws Exception {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringBuilder out = new StringBuilder();
11+
12+
int t = Integer.parseInt(br.readLine().trim());
13+
while (t-- > 0) {
14+
int n = Integer.parseInt(br.readLine().trim());
15+
String s = br.readLine().trim();
16+
17+
// Precompute suffix counts of '(' and ')'
18+
int[] sufOpen = new int[n + 1];
19+
int[] sufClose = new int[n + 1];
20+
21+
for (int i = n - 1; i >= 0; i--) {
22+
sufOpen[i] = sufOpen[i + 1];
23+
sufClose[i] = sufClose[i + 1];
24+
if (s.charAt(i) == '(') sufOpen[i]++;
25+
else sufClose[i]++;
26+
}
27+
28+
int answer = -1;
29+
30+
// Try to skip the earliest ')' that allows a valid suffix RBS
31+
for (int i = 0; i < n; i++) {
32+
if (s.charAt(i) == ')') {
33+
int pairs = Math.min(sufOpen[i + 1], sufClose[i + 1]);
34+
if (pairs > 0) {
35+
answer = 2 * pairs;
36+
break;
37+
}
38+
}
39+
}
40+
41+
out.append(answer).append('\n');
42+
}
43+
44+
System.out.print(out.toString());
45+
}
46+
}

0 commit comments

Comments
 (0)