zoukankan      html  css  js  c++  java
  • Parencodings

    Parencodings

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 13   Accepted Submission(s) : 7
    Problem Description
    Let S = s1 s2 … s2n be a well-formed string of parentheses. S can be encoded in two different ways: [ul] [li]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).[/li] [li]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).[/li] [/ul] Following is an example of the above encodings: [pre] S (((()()()))) P-sequence 4 5 6666 W-sequence 1 1 1456 [/pre] 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 file 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
    2001 Asia Regional Teheran
     
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main()
     5 {
     6     int T,num,i,j,sign,sum,K,k,z,tend,alto;
     7     scanf("%d",&T);
     8     while(T--)
     9     {
    10         int a[1000]={0},b[1000],c[1000]={0};
    11         scanf("%d %d",&num,&sign);
    12         a[sign]+=1;
    13         b[0]=sign;
    14         getchar();
    15         for(i=sign+1,j=1,k=1;j<num;j++,i++)
    16         {
    17 
    18             scanf("%d",&sum);
    19             if(sign==sum)
    20             {
    21                 a[i]+=1;
    22                 b[k]=i;
    23                 k++;
    24             }
    25             else
    26             {
    27                 K=sum-sign;
    28                 a[i+K]+=1;
    29                 b[k]=i+K;
    30                 k++;
    31                 i=i+K;
    32             }
    33             sign=sum;
    34         }
    35 
    36         for(j=0;j<k;j++)
    37             for(z=b[j]-1,tend=1;z>=0;z--)
    38             {
    39                 if(a[z]==1)
    40                     continue;
    41                 else
    42                 {
    43                     if(a[z]==0)
    44                     {a[z]='N';c[j]+=1;break;}
    45                     else
    46                     {
    47                         if(a[z]=='N')
    48                         {
    49                             c[j]+=1;
    50                         }
    51                             continue;
    52                     }
    53                 }
    54             }
    55         for(j=0;j<k;j++)
    56         {
    57                 printf("%d",c[j]);
    58             if(j!=k-1)
    59             putchar(' ');
    60         }
    61         putchar('
    ');
    62     }
    63     return 0;
    64 
    65 }
    View Code
    转载请备注:
    **************************************
    * 作者: Wurq
    * 博客: https://www.cnblogs.com/Wurq/
    * Gitee: https://gitee.com/wurq
    **************************************
  • 相关阅读:
    Python 文件操作
    Python 操作 sqlite
    Python中的random模块
    Linux系统下的/etc/nsswitch.conf文件
    Python 列表/元组/字典总结
    快斗之翼:python2的print和python3的print()
    田小计划:图解Python深拷贝和浅拷贝
    Python 自省指南
    Python运算符优先级
    tc: 模拟网络异常的工具
  • 原文地址:https://www.cnblogs.com/Wurq/p/3750302.html
Copyright © 2011-2022 走看看