51nod 1791 合法括号子段 (队列)

来源:互联网 发布:软件产品质量缺陷等级 编辑:程序博客网 时间:2024/05/16 03:10

每次匹配上一个,当前位置能匹配的括号数应该是左括号减一位置的括号数+1;

代码一看就懂,还自带stack函数,省的数组模拟了。

#include <bits\stdc++.h>using namespace std;char s[1100009];long long num[1100009];stack<int>q;int main(){    int t;    scanf("%d",&t);    while(t--)    {     scanf("%s",s);     int len=strlen(s);    long long ans=0;    while(!q.empty())q.pop();    for(int i=0;i<len;i++)    {        num[i]=0;      if(s[i]=='(')q.push(i);      else      {          if(q.empty())continue;          ans+=num[q.top()-1]+1;          num[i]=num[q.top()-1]+1;          q.pop();      }    }    printf("%lld\n",ans);    }    return 0;}


原创粉丝点击