zoukankan      html  css  js  c++  java
  • poj 1068 Parencodings

    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 22797   Accepted: 13363

    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 //poj  1068
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 #include <stack>
     6 #include <iostream>
     7 using namespace std;
     8 stack<int> s;
     9 int main(){
    10     //freopen("D:\INPUT.txt","r",stdin);
    11     int t,n;
    12     cin>>t;
    13     while(t--){
    14         while(!s.empty()){
    15             s.pop();
    16         }
    17         cin>>n;
    18         int i,j,k,num,pre=0;
    19         for(i=0;i<n;i++){
    20             if(i){
    21                cout<<" ";
    22             }
    23             scanf("%d",&num);
    24             //cout<<num<<endl;
    25             j=num-pre;//相邻两个右括号之间的左括号数目-1
    26             pre=num;//记录前一个右括号前面哪有几个左括号
    27             if(j==1){//多一个左括号
    28                 cout<<1;
    29                 if(!s.empty()){
    30                         s.top()++;
    31                 }
    32             }
    33             else{
    34                 if(!j){//相等
    35                     int next=++s.top();
    36                     cout<<s.top();
    37                     s.pop();
    38                     if(!s.empty()){
    39                         s.top()+=next;
    40                     }
    41                 }
    42                 else{//隔了不止一个左括号
    43                     cout<<1;
    44                     j--;
    45                     while(j--){
    46                         s.push(0);
    47                     }
    48                     s.top()++;
    49                 }
    50             }
    51         }
    52         cout<<endl;
    53         //cout<<"aa"<<endl;
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    RHEL7使用ssm命令管理LVM
    LVM命令摘要
    Linux用户磁盘配额
    Linux磁盘分区实战案例
    通过yum升级CentOS/RHEL最小化安装
    RHEL7下PXE+FTP+Kickstart无人值守安装操作系统
    配置VSFTP服务器
    RHEL7下PXE+NFS+Kickstart无人值守安装操作系统
    RHEL7下PXE+Apache+Kickstart无人值守安装操作系统
    html5实现图片自适应手机屏幕页面的css
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4644094.html
Copyright © 2011-2022 走看看