• poj 1068 -- Parencodings


    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 19068   Accepted: 11503

    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

    简单模拟题,给出若干左右括号,能写出两种数列,其一:在第i个右括号前有多少个左括号pi就是几。 其二:找距离第i个右括号最近的左括号(没有配过对的)。
    此题给出其一队列,求其二,模拟即可,不多说。

     1 /*======================================================================
     2  *           Author :   kevin
     3  *         Filename :   Parencodings.cpp
     4  *       Creat time :   2014-05-23 13:41
     5  *      Description :
     6 ========================================================================*/
     7 #include <iostream>
     8 #include <algorithm>
     9 #include <cstdio>
    10 #include <cstring>
    11 #include <queue>
    12 #include <cmath>
    13 #define clr(a,b) memset(a,b,sizeof(a))
    14 #define M 50
    15 using namespace std;
    16 char str[M];
    17 int vis[M];
    18 int main(int argc,char *argv[])
    19 {
    20     int t,n;
    21     scanf("%d",&t);
    22     while(t--){
    23         scanf("%d",&n);
    24         clr(str,0);
    25         clr(vis,0);
    26         int a,cc = 0,cnt = 0;
    27         for(int i = 0; i < n; i++){
    28             scanf("%d",&a);
    29             for(int j = cc; j < a; j++){
    30                 str[cnt++] = '(';
    31             }
    32             str[cnt++] = ')';
    33             cc = a;
    34         }
    35         int kong = 0;
    36         for(int i = 0; i < 2*n; i++){
    37             if(str[i] == ')'){
    38                 int steps = 1;
    39                 for(int j = i-1; j >= 0; j--){
    40                     if(str[j] == '(' && !vis[j]){
    41                         if(kong != n-1){
    42                             printf("%d ",steps);
    43                             kong++;
    44                         }
    45                         else{
    46                             printf("%d
    ",steps);
    47                         }
    48                         vis[j] = 1;
    49                         break;
    50                     }
    51                     if(str[j] == '(' && vis[j]){
    52                         steps++;
    53                     }
    54                 }
    55             }
    56         }
    57     }
    58     return 0;
    59 }
    View Code
    Do one thing , and do it well !
  • 相关阅读:
    事件基础
    Event loop 事件的循环和为什么使用函数
    Promise 对象---异步调用
    新版博客园分类不能正常显示
    OpenCV学习
    c# 常用正则
    C#调用OpenCV——美图效果
    WPF中的Image控件Source的设置(包括直接读取图片文件的代码)
    图像处理的灰度化和二值化
    C#弹出U盘
  • 原文地址:https://www.cnblogs.com/ubuntu-kevin/p/3747602.html
Copyright © 2020-2023  润新知