#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{ int n,m,i,j,k,t,z,x;
char p[1000000];
cin>>n;
for (i=1;i<=n;i++)
{
cin>>m; //还原括号串
t=0;z=0; // t表示左括号总数,z为指针
for (j=1;j<=m;j++)
{
cin>>k;
while (t<k)
{ z++;
t++;
p[z]='1'; //1表示左括号
}
z++;
p[z]='0'; //0表示右括号
}
for (j=1;j<=z;j++)
if (p[j]=='0')
{
t=0;x=j;
do
{
x--;
if (p[x]=='2') t++; //有一个右括号及包含一对括号,并做标记
}while (p[x]!='1');
cout<<t+1<<" ";
p[x]='2';
}
cout<<endl;
}
return 0;
}
题意:一个括号表达式可以按照如下的规则表示,就是每个右括号之前的左括号数。
比如(((()()()))),每个右括号之前的左括号数序列为P=4 5 6 6 6 6,而每个右括号所在的括号内包含的括号数为W=1 1 1 4 5 6.
现在给定P,输出W。