poj1068Parencodings

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值