• [POJ1068]Parencodings


    [POJ1068]Parencodings

    试题描述

    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. 

    输入

    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.

    输出

    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.

    输入示例

    2
    6
    4 5 6 6 6 6
    9
    4 6 6 6 6 8 9 9 9

    输出示例

    1 1 1 4 5 6
    1 1 2 4 5 1 1 3 9

    数据规模及约定

    见“输入

    题解

    用个栈胡乱搞搞。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <vector>
    #include <queue>
    #include <cstring>
    #include <string>
    #include <map>
    #include <set>
    using namespace std;
    
    const int BufferSize = 1 << 16;
    char buffer[BufferSize], *Head, *Tail;
    inline char Getchar() {
        if(Head == Tail) {
            int l = fread(buffer, 1, BufferSize, stdin);
            Tail = (Head = buffer) + l;
        }
        return *Head++;
    }
    int read() {
        int x = 0, f = 1; char c = Getchar();
        while(!isdigit(c)){ if(c == '-') f = -1; c = Getchar(); }
        while(isdigit(c)){ x = x * 10 + c - '0'; c = Getchar(); }
        return x * f;
    }
    
    #define maxn 50
    int n, S[maxn], top;
    
    int main() {
    	int T = read();
    	while(T--) {
    		n = read();
    		int lst = 0; top = 0;
    		for(int i = 1; i <= n; i++) {
    			int x = read();
    			for(int j = 1; j <= top; j++) S[j] += x - lst;
    			for(int j = x - lst; j; j--) S[++top] = j;
    			printf("%d%c", S[top--], i < n ? ' ' : '
    ');
    			lst = x;
    		}
    	}
    	
    	return 0;
    }
    
  • 相关阅读:
    document.body.clientHeight 和 document.documentElement.clientHeight 的区别
    Javascript操作div及其内含对象示例
    面向对象分析设计的经验原则
    翻页控件示例代码
    C#的6种常用集合类示例
    UML基础知识
    重温OSI和TCP/IP网络分层
    设计模式总结
    活用设计模式
    GridView当数据源为空时仍显示表头
  • 原文地址:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/6105487.html
Copyright © 2020-2023  润新知