zoukankan      html  css  js  c++  java
  • 51nod1791-合法括号子段

    有一个括号序列,现在要计算一下它有多少非空子段是合法括号序列。

    合法括号序列的定义是:

    1.空序列是合法括号序列。

    2.如果S是合法括号序列,那么(S)是合法括号序列。
    3.如果A和B都是合法括号序列,那么AB是合法括号序列。

    Input
    多组测试数据。
    第一行有一个整数T(1<=T<=1100000),表示测试数据的数量。
    接下来T行,每一行都有一个括号序列,是一个由'('和')'组成的非空串。
    所有输入的括号序列的总长度不超过1100000。
    一开始以为是分治,后俩发现乱搞,num[i]表示从i开始向前的连续括号数。
    然后就用一个栈来维护匹配到的是哪个括号
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<stack>
    using namespace std;
    #define ll long long
    char str[1000505];
    stack<int> s; 
    int T;
    ll ans,num[1000505]; 
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s",str+1);
            ans=0;
            while(!s.empty()) s.pop(); 
            //memset(num,0,sizeof(num));
            int len=strlen(str+1);
            for(int i=1;i<=len;i++)
            {
                if(str[i]=='(')
                {
                    num[i]=0;
                    s.push(i);
                }else{
                    if(s.empty()) 
                    {
                        num[i]=0;
                        continue;
                    }
                    ans+=(ll)num[s.top()-1]+1;
                    num[i]=(ll)num[s.top()-1]+1;
                    s.pop();
                    //cout<<ans<<endl; 
                }
            }
            printf("%lld
    ",ans);
        }
        
    }

     因为strlen和memset两个坑超时~~

  • 相关阅读:
    spring.jar的下载地址
    spring学习(1)
    供求信息网(2)
    编写学生增删改查系统时碰到的问题
    js中innerText/value/innerHTML三个属性的区别
    form的提交方式
    错误记录(1)
    供求信息网
    GYM 101673F(树计数)
    GYM 101673G(dp)
  • 原文地址:https://www.cnblogs.com/dancer16/p/7324666.html
Copyright © 2011-2022 走看看