Scaena Felix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 105 Accepted Submission(s): 52
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
#include
#include
using namespace std;
const int N = 1001;
char str[N];
int main(void)
{
int T;
cin >> T;
while(T--)
{
cin >> str;
int i, j;
int len = strlen(str);
int ans = len;
for(i = 0; i <= len; i++)
{
int tmp1 = 0;
for(j = 0; j < i; j++)
{
if(str[j] != ')') tmp1++;
}
for(j = i; j < len; j++)
{
if(str[j] != '(') tmp1++;
}
if(ans > tmp1) ans = tmp1;
}
cout << ans << endl;
}
return 0;
}