http://poj.org/problem?id=1068
1.利用P-sequence里的数值,还原出括号串S。
2.从左往右遍历括号串S,遇到右括号停止,设置计数器。指针回退,遇到左括号不管有没有匹配过,都要
计数器+1,直到遇到左括号没有匹配过停止。新匹配的左括号处置新的特殊字符,标记为访问过,为下一次
指针回退做准备。
<span style="font-size:18px;">#include <stdio.h>
char S[25];
int num[25];
int main()
{
int t,n,i,j,k,count;
scanf("%d",&t);
while(t--)//测试样例的个数
{
scanf("%d",&n);
num[0]=0;
k=0;
for(i=1;i<=n;i++)//P-sequence
scanf("%d",&num[i]);
for(i=1;i<=n;i++)//make S
{
for(j=0;j<(num[i]-num[i-1]);j++)
S[k++]='(';
S[k++]=')';
}
for(i=0;i<k;i++)//遍历括号串S
{
if(S[i]==')')
{
count=0;//计数器置0
for(j=i-1;j>=0;j--)//从右括号往左扫描
{
if(S[j]!=')')
count++;
if(S[j]=='(')
{
S[j]='~';
break;
}
}
printf("%d ",count);
}
}
printf("\n");
}
return 0;
}
</span>