• 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两个坑超时~~

  • 相关阅读:
    oracle依据注释查询表信息
    oracle中建表后添加注释
    第四章:联机分析处理olap
    第三节:数据仓库与ODS
    第二节:数据仓库系统的体系结构
    第一节:数据库与数据仓库
    视图
    oracle中生成随机数的方法
    oracle两表中的两列进行模糊匹配的方法
    Oracle基本操作
  • 原文地址:https://www.cnblogs.com/dancer16/p/7324666.html
Copyright © 2020-2023  润新知