HDU 5479 Scaena Felix

来源:互联网 发布:数据的分散和集中程度 编辑:程序博客网 时间:2024/05/21 05:57

Scaena Felix

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 258    Accepted Submission(s): 112


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.
 

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.
 

Output
For every test case output the least number of modification.
 

Sample Input
3()(((((())
 

Sample Output
102

BC,今天直接哭了,本来A了3道,坐等涨分,结果醒来一看,全卡掉了。。。。

不过,今天搞到女神的照片了,哈哈哈

#include <iostream>#include <string>#include <stdlib.h>#include <ctype.h>#include <cstdio>#include <cstdlib>#include <set>#include <map>#include <queue>#include <stack>#include <cstring>#include <math.h>#include <algorithm>#define LL long long#define INF 0x3f3f3f3f#define RR freopen("in.txt","r",stdin)#define WW freopen("out.txt","w",stdout)#define PI acos(-1.0)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 = INF;        for(int i=0;i<=len;i++)        {            ans = min(ans,L[i]+R[i+1]);        }        cout<<ans<<endl;    }    return 0;}



0 0
原创粉丝点击