• 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 }
  • 相关阅读:
    PHP 页面编码声明方法详解(header或meta)
    PHP error_reporting() 错误控制函数功能详解
    发送邮件程序报错454 Authentication failed以及POP3和SMTP简介
    使用 PHPMailer 发送邮件
    PHP debug_backtrace() 函数
    PHP_php.ini_说明详解
    详解spl_autoload_register()函数
    各浏览器对常用或者错误的 Content-Type 类型处理方式不一致
    string.format大全
    ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4644094.html
Copyright © 2020-2023  润新知