HDU 5479(栈的应用)

来源:互联网 发布:linux多线程如何实现 编辑:程序博客网 时间:2024/06/05 19:26

Scaena Felix

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


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
 
//判断()的个数行
// 利用栈的先进后出的特点模拟
#include <stdio.h>#include <string.h>#include <stack>using namespace std;char str[1000+10];int main(){    int t;    scanf("%d",&t);    while(t--)    {        getchar();        scanf("%s",str);        stack <char> s;        int len=strlen(str);        int cnt=0;        for(int i=0;i<len;i++)        {            if(str[i]=='(')                s.push(str[i]);            else if(str[i]==')')            {                if(!s.empty())  //判断是否为空                {                    s.pop();                    cnt++;                }            }        }        printf("%d\n",cnt);    }    return 0;}



0 0
原创粉丝点击