Parencodings
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 22849   Accepted: 13394

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

题意是给出一个成对的括号顺序。

P序列的每一个数代表每一个右括号左边有多少左括号。

W序列的每一个数代表每一个右括号与其成对的左括号范围之内有多少右括号。

给出P序列,求W序列。

自己的做法是规规矩矩模拟还原,只是想如果数据量比较大,还得自己找规律了。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int Test,num,i;
int ps[105];
int flag[105]; vector<char> seq; void change()
{
int qian=0,temp,j;
for(i=1;i<=num;i++)
{
temp = ps[i]-qian;
for(j=1;j<=temp;j++)
seq.push_back('<');
seq.push_back('>');
qian=ps[i];
}
} void cal()
{
memset(flag,0,sizeof(flag));
int len= seq.size();
int j; for(i=1;i<len;i++)
{
if(seq[i]=='>')
{
int result=1;
for(j=i-1;j>=0;j--)
{
if(seq[j]=='>')
result++;
if(seq[j]=='<'&&flag[j]==0)
{
cout<<result<<' ';
flag[j]=1;
break;
}
}
}
}
cout<<endl;
} int main()
{
cin>>Test; while(Test--)
{
cin>>num;
for(i=1;i<=num;i++)
cin>>ps[i];
change();
cal(); seq.clear();
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. iOS页面传值-wang
  2. iOS开发——UI基础-UIScrollView
  3. Python入门笔记(15):对文件的操作(1)
  4. cameralink---格式 概要清晰理解
  5. cocos2d的ARC开启
  6. delegate 中的BeginInvoke和EndInvoke方法
  7. 解释DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
  8. Ice笔记-利用Ice::Application类简化Ice应用
  9. 获取新浪天气api显示天气情况(转)
  10. SQL 编码标准
  11. 最新发布树莓派2代Wi-Fi自动连接实战(适合初学者)
  12. FaceNet---深度学习与人脸识别的二次结合
  13. Thread初探
  14. 一种轻便且灵活的js模板的思路
  15. UGUI 中Dropdown控件的使用经验
  16. Docker入门-docker-compose使用(二)
  17. ASP.NET MVC什么时候使用异步Action
  18. NewBluePill源码学习 &lt;一&gt;
  19. 【算法笔记】A1047 Student List for Course
  20. 自定义tag标签的方法

热门文章

  1. sql语句中,传入的参数带单引号的问题
  2. Linux CentOS7 VMware克隆、虚拟机之间互连——初学笔记
  3. 如何在Java中测试类是否是线程安全的
  4. rapid-generator JAVA代码生成器
  5. HDFS 命令行基本操作
  6. 分享一款免费的工控组态软件(PCHMI)
  7. Ubuntu 19.10将使用GCC 9作为默认编译器
  8. bugku love
  9. SQL*Loader-128: SQL*Loader-523
  10. java文件的上传