zoukankan      html  css  js  c++  java
  • 模拟括号

    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
  • 相关阅读:
    AD账号解锁
    Django中的DateTimeField格式
    接口调用,输出结果为Json格式(ConvertTo-Json),提交参数给URL(WebRequest)
    jQuery表格排序(tablesorter)
    Python脚本性能分析
    监控文件内容变化,即时写入到新文件(tail)
    导出目录权限
    多进程、多线程处理文件对比
    shell 实例收集
    DHCP : 网络世界身份的获取
  • 原文地址:https://www.cnblogs.com/baoluqi/p/3745384.html
Copyright © 2011-2022 走看看