Scaena Felix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 517 Accepted Submission(s): 223
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
Source
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 1002
char w[maxn];
int num[maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",w);
int len = strlen(w);
for(int i = 0;i < len; i++)
if(w[i] == ')') num[i] = 0;
else num[i] = 1;
for(int i= 1;i < len; i++)
num[i] = num[i]+num[i-1];
int ans = len-num[len-1];
for(int i = 0 ;i < len ;i++){
ans = min(ans,num[i]+len-1-i-num[len-1]+num[i]);
}
printf("%d\n",ans);
}
return 0;
}