Scaena Felix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 759 Accepted Submission(s): 321
Problem Description
Given a parentheses sequence consist of '(' and ')', a modify can filp a parentheses, changing '(' to ')' or ')' to '('.
If we want every not empty <b>substring</b> of this parentheses sequence not to be "paren-matching", how many times at least to modify this parentheses sequence?
For example, "()","(())","()()" are "paren-matching" strings, but "((", ")(", "((()" are not.
If we want every not empty <b>substring</b> of this parentheses sequence not to be "paren-matching", how many times at least to modify this parentheses sequence?
For example, "()","(())","()()" are "paren-matching" strings, but "((", ")(", "((()" are not.
Input
The first line of the input is a integer
T
, meaning that there are
T
test cases.
Every test cases contains a parentheses sequence S only consists of '(' and ')'.
1≤|S|≤1,000 .
Every test cases contains a parentheses sequence S only consists of '(' and ')'.
1≤|S|≤1,000 .
Output
For every test case output the least number of modification.
Sample Input
3 () (((( (())
Sample Output
1 0 2#include<cstring> #include<iostream> using namespace std; int L[1010],R[1010]; char s[1010]; int main(){ int T; cin>>T; while(T--){ cin>>s+1; int len = strlen(s+1); for(int i=1;i<=len;i++){ L[i] = L[i-1] + (s[i] == '('); } for(int i=len;i>=1;i--){ R[i] = R[i+1] + (s[i] == ')'); } int ans =1000; for(int i=0;i<=len;i++){ ans = min(ans,L[i]+R[i+1]); } cout<<ans<<endl; } return 0; }