zoukankan      html  css  js  c++  java
  • poj1068 模拟

    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 25010   Accepted: 14745

    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

    Source

    代码:
     1 #include<iostream>
     2 #include<string>
     3 #include<cstdio>
     4 using namespace std;
     5 int main()
     6 {
     7     int n,t;
     8     scanf("%d",&t);
     9     while(t--)
    10     {
    11         int q1=0,q2=0;
    12         string s;
    13         scanf("%d",&n);
    14         for(int i=0;i<n;i++)
    15         {
    16             scanf("%d",&q1);
    17             q2=q1-q2;
    18             while(q2--)
    19             s+="(";
    20             s+=")";
    21             q2=q1;
    22         }
    23         int num=s.size();
    24         int cnt=0;
    25         for(int i=0;i<num;i++)
    26         {
    27             if(s[i]==')')
    28             {
    29                 cnt++;
    30                 int flag=1;
    31                 int sum=0;
    32                 for(int j=i-1;j>=0;j--)
    33                 {
    34                     if(flag==0)
    35                     break;
    36                     if(s[j]=='(')
    37                     {
    38                         sum++;
    39                         flag-=1;
    40                     }
    41                     else if(s[j]==')')
    42                     flag+=1;
    43                 }
    44                 if(cnt!=n)
    45                 printf("%d ",sum);
    46                 else printf("%d
    ",sum);
    47             }
    48         }
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    【二分图匹配入门专题1】L
    【二分图匹配入门专题1】K
    【km算法模板+总结】
    【二分匹配入门专题1】J
    【自定义博客园~~~】
    【二分图匹配入门专题1】I
    【二分图匹配入门专题1】H
    【二分图匹配入门专题1】G
    【二分图匹配入门专题1】E
    【二分图匹配入门专题1】F
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/5910981.html
Copyright © 2011-2022 走看看