关闭

poj1068Parencodings

108人阅读 评论(0) 收藏 举报
分类:

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>


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11883次
    • 积分:726
    • 等级:
    • 排名:千里之外
    • 原创:64篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档