[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 ? ‘ ‘ : ‘\n‘);
			lst = x;
		}
	}

	return 0;
}
时间: 2024-12-11 12:06:59

[POJ1068]Parencodings的相关文章

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-s

poj1068 Parencodings【模拟】【刷题计划】

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27375   Accepted: 16094 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

【数据结构(高效)/暴力】Parencodings

[poj1068] Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26686   Accepted: 15645 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 = p

poj1068 模拟

Parencodings Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two differen

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

Poj OpenJudge 1068 Parencodings

1.Link: http://poj.org/problem?id=1068 http://bailian.openjudge.cn/practice/1068 2.Content: Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20077   Accepted: 12122 Description Let S = s1 s2...s2n be a well-formed string of p

poj 1068 Parencodings(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19434   Accepted: 11734 题目大意:  给出一个整数表示有n组测试样例  每个样例包含两组数  一个整数m 和一个有m个元素的p数组 数组中的元素表示的意思为第i个' ) '之前有多少个' ( '   . 要求输出一个w数组其元素表示的意思为在第i个' ) '和它匹配的'('之间有多少组已匹配好的括号  (包括其自身) 例如 S

[ACM] POJ 1068 Parencodings(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19352   Accepted: 11675 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

快速切题 poj1068

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19716   Accepted: 11910 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