• POJ1068——Parencodings


    Parencodings

    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

    题目大意:
    设序列 S 是一个完全匹配的括号序列。序列 S 能用下面两种不同方法加密:
    通过一个整数序列 P = p1 p2...pn ,其中 pi 表示序列 S 中第 i 个右括号 ")" 之前的左括号 “(” 的数量。当然这些括号是从左到右数的。
    通过一个整数序列 W = w1 w2...wn ,wi 表示从第 i 个右括号 ")" 相匹配的左括号 “(” 的位置开始数的右括号 “)” 的数目,包括第 i 个右括号 “)” 本身。 (摘自百度知道)
    输入序列P输出序列W。

    解题思路:模拟做的。根据序列P将字母串写出来,在根据W的规则写出序列W。(被String的用法坑了。。)
    Code:

     1 #include<string>
     2 #include<iostream>
     3 using namespace std;
     4 int main()
     5 {
     6     string tmp;
     7     int T,n,a[10000],i,j,k,t,cnt,sum;
     8     cin>>T;
     9     while (T--)
    10     {
    11         cin>>n;
    12         k=0;
    13         tmp="";
    14         for (i=1; i<=n; i++)
    15         {
    16             cin>>a[i];
    17             if (i!=1) t=a[i]-a[i-1];
    18             else t=a[i];
    19             for (j=1; j<=t; j++)
    20                 tmp+='(';
    21             tmp+=')';
    22         }
    23         k=0;
    24         for (i=0; i<=tmp.length()-1; i++)
    25             if (tmp[i]==')')
    26             {
    27                 cnt=0,sum=0;
    28                 for (j=i; j>=0; j--)
    29                 {
    30                     if (tmp[j]==')') cnt++,sum++;
    31                     else cnt--;
    32                     if (!cnt) break;
    33                 }
    34                 a[k++]=sum;
    35             }
    36         for (i=0; i<k; i++)
    37         {
    38             cout<<a[i];
    39             if (i!=k-1) cout<<' ';
    40             else cout<<endl;
    41         }
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    【JavsScript】父子页面之间跨域通信的方法
    【JavaScript】【译】编写高性能JavaScript
    【JavaScript】你知道吗?Web的26项基本概念和技术
    【299】◀▶ IDL
    Python
    Cadence 信号完整性(一)-- 仿真步骤3
    「S-A-L-T-A」项目失败总结!
    java如何遍历hashMap
    Python
    VM网络无法连接--提示ethernet0无法连接到虚拟网络
  • 原文地址:https://www.cnblogs.com/Enumz/p/3763717.html
Copyright © 2020-2023  润新知