zoukankan      html  css  js  c++  java
  • Parencodings(imitate)

    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 20679   Accepted: 12436

    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<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 using namespace std;
     5 int p[30] , w[30] ;
     6 int n ;
     7 char s[200] ;
     8 
     9 void convert1 ()
    10 {
    11     int k = 0 ;
    12     for (int i = 0 ; i < p[0] ; i++)
    13         s[k++] = '(' ;
    14     s[k++] = ')' ;
    15     for (int i = 1 ; i < n ; i++) {
    16         for (int j = 0 ; j < p[i] - p[i - 1]; j++) {
    17             s[k++] = '(' ;
    18         }
    19         s[k++] = ')' ;
    20     }
    21     s[k] = '' ;
    22    // puts (s) ;
    23 }
    24 void convert2 ()
    25 {
    26     int l , r ;
    27     int k = 0 ;
    28     for (int i = 0 ; s[i] != '' ; i++) {
    29         if (s[i] == ')') {
    30             l = 0 ;
    31             r = 1 ;
    32             for (int j = i - 1 ; j >= 0 ; j--) {
    33                 if (s[j] == ')' )
    34                     r++ ;
    35                 else
    36                     l++ ;
    37                 if (l == r)
    38                     break ;
    39             }
    40             w[k++] = r;
    41         }
    42     }
    43     for (int i = 0 ; i < n ; i++) {
    44         printf ("%d" , w[i]) ;
    45         if (i != n - 1)
    46             printf (" ") ;
    47     }
    48     puts ("") ;
    49 }
    50 int main ()
    51 {
    52    // freopen ("a.txt" , "r" , stdin) ;
    53     int T ;
    54     scanf ("%d" , &T) ;
    55     while (T--) {
    56         scanf ("%d" , &n) ;
    57         for (int i = 0 ; i < n ; i++)
    58             scanf ("%d" , &p[i]) ;
    59         convert1 () ;
    60         convert2 () ;
    61     }
    62 }
    View Code
  • 相关阅读:
    用栈消除递归调用,实现DFS【伪代码】
    B树残缺版
    lvm
    RAID独立冗余磁盘阵列
    压缩、归档
    磁盘、文件系统
    setfacl、getfacl
    locate,find
    vim编辑器
    sed流编辑器
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4299634.html
Copyright © 2011-2022 走看看