zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Tidy 一个把HTML 转成XHTML的工具库[整理]
    HTTP详解(转载)
    C#中各种验证方法(数字,邮件,电话,传真,邮政编码,网络地址)和自动编号的
    常用Visual C# 快捷键
    c#中字符串截取使用的方法
    C#将相片转换成二进制存储在数据库中,再从数据库中显示出来
    用长按键重复输入 Mac OS X Lion
    Unsupported major.minor version 51.0解决办法
    XCode4.3.2 没有Command Line Utility选项
    IBM高级工程师,谷歌等国际知名公司工程师撰写Android开发教程合集
  • 原文地址:https://www.cnblogs.com/Enumz/p/3763717.html
Copyright © 2011-2022 走看看