• 模拟括号


    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
    #include<iostream>
    #include<vector>
    #include<cmath>
    using namespace std;
    int a[25],pp[1005];
    int main()
    {
        int t,n;
        cin>>t;
        vector<int> ve;
        vector<int>::iterator it;
        while(t--)
        {
            cin>>n;
            ve.clear();
            for(int i=0;i<n;i++)
                cin>>a[i];
            for(int i=0;i<a[0];i++)
            {
                ve.push_back(1);
            }
            ve.push_back(0);
            for(int i=1;i<n;i++)
            {
                for(int j=0;j<a[i]-a[i-1];j++)
                {
                    ve.push_back(1);
                }
                ve.push_back(0);
            }
            int num=0;
            for(it=ve.begin();it!=ve.end();it++)
            {
                 pp[num]=*it;
                 num++;
            } 
            int sum=0;
            while(1)
            {
                int res=0;
                if(sum==num)
                {
                    cout<<endl;
                    break;
                }
                for(int i=0;i<num;i++)
                {
                   for(int j=i+1;j<num;j++)
                   {
                       if(pp[j]==-1)
                           continue;
                       if(pp[i]+pp[j]==1)
                       {
                           int temp=0;
                           for(int k=i;k<=j;k++)
                           {
                               temp+=pp[k];
                           } 
                           if(temp==1)
                               cout<<1<<" ";
                           else 
                               cout<<1+(abs(temp)+1)/2<<" "; 
                           pp[i]=-1;
                           pp[j]=-1;
                           sum+=2;
                           res=1;
                       }
                       else
                           break;
                   } 
                   if(res==1)
                       break;    
                }
            }
        }
        //system("pause");
        return 0;
    }
    View Code
  • 相关阅读:
    重启远程windows计算机
    web.xml文件的作用及基本配置
    DB2编码问题而导致连接不上上数据库
    合理使用表空间
    自动做题
    怎么给二年级小学生讲鸡兔同笼问题
    DB2 性能分析工具介绍:Event Monitor 篇(摘自IBM官方)
    delphi 对应 c# 的一些函数及类型的转换方法(从网络摘录)
    DB2 基础: 使用重定向恢复克隆 DB2 数据库(部分从IBM官方网站引用)
    response.setContentType()的作用及MIME参数详解
  • 原文地址:https://www.cnblogs.com/baoluqi/p/3745384.html
Copyright © 2020-2023  润新知