题意:
1.p序列:当出现匹配括号对时,从该括号对的右括号开始往左数,直到最前面的左括号数,就是pi的值。
2.w序列:当出现匹配括号对时,包含在该括号对中的所有右括号数(包括该括号对),就是wi的值。
思路:通过pi的值,可以构造出原括号序列,然后再计算wi值,计算wi时,每次匹配了的括号记得标记,
可以用l表示已匹配的左括号,用r表示匹配了的右括号
#include<stdio.h>
int main()
{
int p[25],i,j,k,n,a,T,t;
char s[50];
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&p[i]);
for(k=1;k<=p[1];k++)
s[k]='(';
s[k++]=')';
for(i=2;i<=n;i++){
j=0;
while(j!=p[i]-p[i-1]){
s[k++]='(';
j++;
}
s[k++]=')';
}
j=a=1;
for(i=p[1]+1;i<k;i++){
if(s[i]==')'){
s[i]='r';
for(t=i-1;t>=1;t--){
if(s[t]==')'||s[t]=='r')
a++;
else if(s[t]=='('){
s[t]='l';
break;
}
}
if(j!=n)
printf("%d ",a);
else
printf("%d\n",a);
a=1;
j++;
}
}
}
return 0;
}