poj 1068
2015-11-18 10:34
381 查看
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-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:
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
Sample Output
Time Limit: 1000MS | Memory Limit: 10000K |
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 题意:(模拟题) 对于给出的原括号串,存在两种数字密码串: 1.p序列:当出现匹配括号对时,从该括号对的右括号开始往左数,直到最前面的左括号数,就是pi的值。 2.w序列:当出现匹配括号对时,包含在该括号对中的所有右括号数(包括该括号对),就是wi的值。 题目的要求:对给出的p数字串,求出对应的w串。 串长限制均为20 题目不难,关键是题目很难读懂,我可能写得比较麻烦。 附上代码: #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <iomanip> #include <algorithm> #include <iomanip> #include <cmath> using namespace std; int main() { int t,n,a[25],b[1000],i,cnt,k,j,x[1000],visit[1000],tmp,m; char c[1000]; cin>>t; while(t--) { cin>>n; for(i=0;i<n;i++) { cin>>a[i];//a数组用来记录pi的值 } cnt=0; for(i=0;i<a[0];i++) { c[cnt++]='(';//用c数组来模拟出整个括号字符串 } c[cnt++]=')'; for(i=1;i<n;i++) { if(a[i]>a[i-1]) { for(k=0;k<a[i]-a[i-1];k++) { c[cnt++]='(';//如果下一项的值要比该项的值大,那么它们两个的中间肯定增加了a[i]-a[i-1]个左括号 } c[cnt++]=')'; }else{//如果两者相等,直接添加右括号 c[cnt++]=')'; } } for(i=0;i<cnt;i++) { b[i]=0;//记录wi的值 } memset(visit,0,sizeof(visit));//visit数组用来标记,求wi时,我们要找到与“)”最近且没有被匹配过的“(” for(j=0;j<cnt;j++) { if(c[j]==')') { if(c[j-1]=='(') { b[j]=1; visit[j-1]=1;//如果匹配了,那么我们要把这个左括号标记 }else{ tmp=1;//不匹配,则要往左寻找与它相匹配的左括号 for(m=j-1;;m--) { if(c[m]==')') { tmp++; }else{ if(!visit[m])//如果找到左括号且没有被标记,那么肯定是可以和它匹配的 { visit[m]=1;//把它进行标记 b[j]=tmp;//把右括号的个数储存到b数组里 break; } } } } } } k=0; for(m=0;m<cnt;m++) { if(b[m]) { x[k++]=b[m];//因为b数组里含有许多0,不方便输出,所以我用了x数组,把b数组非0的值全部进行储存 } } for(i=0;i<k-1;i++) { cout<<x[i]<<" ";//x数组就是我们要求的wi序列,进行输出 } cout<<x[k-1]<<endl; } return 0; } 总体说我的代码比较麻烦,不过思路很简单,很容易理解,而且耗时也是0ms
相关文章推荐
- RotatedRect CamShift函数
- PBXcp error修复-No such file or directory
- 统计今天一天的订单数量
- 测试移动web页面
- SqlServer时间戳与普通格式的转换
- OC 中 覆盖属性会有提示Auto property synthesis will not synthesize property 'delegate'
- mysql 和 redis的区别
- String字符串截取函数的改造
- (JavaSE)基础内容复习
- Windows上打开大文件的工具
- yii2 RESTful 接口 api -2 : 写自己的接口方法search
- ubuntu的which、whereis、locate和find命令
- Oracle查询重复数据并删除,只保留一条记录
- 关于百度地图ios8死机bug问题
- 大量数据情况下单线程插入和多线程insert数据库的性能测试
- JS Object和Function的区别
- <select>回显的几种方式以及struts2的标签
- Unity Mecanim在大型mmo中的应用
- 文档地址
- iOS9 Storyboard unwind segue反回传递事件时机详细步骤