codeforcres 5C Longest Regular Bracket Sequence 队列优化 栈

来源:互联网 发布:android蓝牙小车源码 编辑:程序博客网 时间:2024/05/19 06:17

做法:用个栈就过了,然后数组l[i]记录,以这个点为终点的最长括号序列。明白什么是字串啊....

#include <iostream>#include <utility>#include <stack>#include <cstdio>#define LMT 1000003using namespace std;int len,ans;char bra[LMT];int l[LMT];//没有考虑到连续 ()()()()int main(){    len=-1;ans=0;    int bl,pre,prel;    scanf("%s",bra);    stack < pair<char,int> > st;    pair<char,int> t;    for(int i=0;bra[i];i++)    {        if(!st.empty())        t=st.top();        if(!st.empty()&&t.first=='('&&bra[i]==')')        {            st.pop();            bl=i-t.second+1;            bl+=l[t.second-1];            l[i]=bl;            if(bl>len)            {                ans=1;                len=bl;            }            else if(bl==len)                ans++;        }        else st.push(make_pair(bra[i],i));    }    if(ans==0)printf("0 1\n");    else printf("%d %d\n",len,ans);    return 0;}