• 模拟 --- 简单括号匹配


    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 19067   Accepted: 11502

    Description

    Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:
    q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
    q By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).

    Following is an example of the above encodings:

    S (((()()())))
    P-sequence 4 5 6666
    W-sequence 1 1 1456

    Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.

    Input

    The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.

    Output

    The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.

    Sample Input

    2
    6
    4 5 6 6 6 6
    9 
    4 6 6 6 6 8 9 9 9
    

    Sample Output

    1 1 1 4 5 6
    1 1 2 4 5 1 1 3 9

    【题目来源】

    Tehran 2001

    http://poj.org/problem?id=1068

    【题目大意】

    给你一串数字,每个数字的位置都是一个右括号,并且本身的值表示该右括号的左边有多少左括号。

    现在要你匹配这些右括号,输出一列数字,这些数字表示该右括号到达与该右括号匹配的左括号这一段中有多少个左括号。

    翻译得太差强人意了,有时候题意只可意会,不可言传==||

    【题目分析】

    题目很简单,直接模拟就可。

    AC代码:

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define MAX 100000
    using namespace std;
    struct Node
    {
        bool lor;
        bool vis;
    };
    Node node[100000];
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int n;
            int i,j;
            int a[25];
            for(i=0;i<MAX;i++)
                node[i].vis=false;
            cin>>n;
            a[0]=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
            }
            int index=-1;
            int temp;
            for(i=1;i<=n;i++)
            {
                temp=a[i]-a[i-1];
                for(j=0;j<temp;j++)
                {
                    node[++index].lor=0;
                }
                node[++index].lor=1;
            }
    //        cout<<index<<endl;
    //        for(i=0;i<=index;i++)
    //            printf("%d ",node[i].lor);
    //        puts("");
            int cnt;
            int ans[MAX];
            int index1=-1;
            for(i=0;i<=index;i++)
            {
                cnt=0;
                if(node[i].lor==1)
                {
                    for(j=i;j>=0;j--)  //倒过来数
                    {
                        if(node[j].lor==0)
                        {
                            cnt++;
                           if(!node[j].vis)
                                {
                                    node[j].vis=true;
                                    ans[++index1]=cnt;
    //                                cout<<"cnt="<<cnt<<endl;
                                    break;
                                }
                        }
                    }
                }
                cnt=0;
            }
    //        cout<<"index1="<<index1<<endl;
            for(i=0;i<=index1;i++)
            {
                if(i==0)
                   cout<<ans[i];
                else
                   cout<<" "<<ans[i];
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    spring详解(五)——事物管理
    spring详解(四)——JDBC
    spring详解(三)——AOP
    Spring详解(二)
    Spring详解(一)
    springMVC(九)——restful风格和异常处理
    Linux 文件权限
    如何使用Git从GitHub上下载项目
    Spring(1)
    SpringMvc(4)
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3744105.html
Copyright © 2020-2023  润新知