[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.

输入示例


输出示例

        

数据规模及约定

见“输入

题解

用个栈胡乱搞搞。

#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;
}

最新文章

  1. Permutations II
  2. BFC之清除浮动篇&amp;clear
  3. 通过BroadCast与service时时监听网络变化
  4. Linux静态库生成指南
  5. 160922、配置:spring通过profile或@profile配置不同的环境(测试、开发、生产)
  6. 谈 IIS7.5 Asp.Net模拟用户
  7. LtUpload上传组件
  8. 学习设计模式--观察者模式(C++)
  9. C#通过模板导出Word(文字,表格,图片)
  10. nginx启动,重启,关闭
  11. python3 selenium 鼠标悬停操作
  12. 工欲善其事,必先利其器之open live writer写作
  13. Java秋招面经大合集
  14. 腾讯云服务器搭建Apache/PHP/MySQL环境
  15. 使用PHP、MySQL实现修改密码 + 防止通过url强行进入系统
  16. Netdata---Linux系统性能实时监控平台部署记录
  17. 配置java环境jdk
  18. Centos7 用户登录失败N次后锁定用户禁止登陆
  19. 坑爹的高德地图API
  20. hashCode()方法与equals()方法的说明

热门文章

  1. Lock的用法,为什么要用?
  2. js内存泄漏
  3. php上传$_FILES 无法取值
  4. C#中事件的使用
  5. Kafka——分布式消息系统
  6. Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】
  7. JBoss7 安装配置
  8. mysql存储过程对900w数据进行操作测试
  9. css3实现渐变的iPhone滑动解锁效果
  10. InnerClass内部类