【POJ】Parencodings
来源:互联网 发布:装饰桌面的软件 编辑:程序博客网 时间:2024/06/05 07:32
Parencodings
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 21004 Accepted: 12590
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 6666W-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
Tehran 2001
#include <iostream>#include <memory.h>using namespace std;class Solution{public: Solution(){ s=NULL; res=NULL; } ~Solution(){ if(s!=NULL) delete s; if(res!=NULL) delete res; } int *solve(int n,int *p){ if(n==0) return NULL; if(s!=NULL) delete s; if(res!=NULL) delete res; //Construct s; s=new char[2*n]; res=new int[n] ; memset(s,0,2*n); for(int i=0;i<n;++i) res[i] =1; for(int i=0;i<n;++i) s[p[i] +i]=1; //")" for(int i=p[0],k=0;i<n*2;++i){ //Find the "(" if(s[i] !=1) continue; for(int j=i-1;j>=0;--j) if(s[j] ==0){ s[j] =-1; ++k; break; }else if(s[j] ==1){ ++res[k] ; } } /* for(int i=0;i<2*n;++i) if(s[i] ==-1) cout<<'('; else if(s[i] ==1) cout<<')'; else cout<<"Wrong"; cout<<endl; */ return res; }private: char *s; int *res;};int main(){ int total=0,n=0; cin>>total; Solution s; int *res; while(total>0){ cin>>n; int *tmp=new int[n] ; for(int i=0;i<n;++i) cin>>tmp[i] ; res=s.solve(n,tmp); for(int i=0;i<n;++i) cout<<res[i] <<' '; cout<<endl; --total; }return 0;}
- POJ Parencodings
- poj Parencodings
- 【POJ】Parencodings
- poj 1068 Parencodings
- POJ 1068 Parencodings
- POJ 1068 Parencodings
- poj 1068 Parencodings
- POJ 1068 Parencodings
- POJ 1068 Parencodings
- POJ 1068 Parencodings 模拟
- POJ 1068 Parencodings
- poj 1068 Parencodings
- poj 1068 Parencodings
- poj 1068 Parencodings
- poj 1068 Parencodings
- poj-1068-Parencodings
- POJ 1068 Parencodings
- POJ 1068 Parencodings
- 一路积累
- Nginx系列(七.nginx支持pathinfo)
- TP-LINK TL-WR703N 挂载摄像头成功!
- NetworkError: 500 Internal Server Error的解决办法
- poj1012
- 【POJ】Parencodings
- UIApplication sharedapplication用法总结
- 浙江大学PAT_乙级_1012. 数字分类 (20)
- p2v之 clonezilla(3)还原镜像文件到openstack(kvm)启动镜像(最后附VMware workstations)
- UVA 10954 Add All
- WR703N焊TTL线成功,但又遇到问题
- 图像处理项目总结
- 用eclipse写一个webservice
- Spring的AOP初步了解(四)