poj 1068 Parencodings(模拟题)

来源:互联网 发布:数据库集群是啥意思 编辑:程序博客网 时间:2024/06/05 01:13

题目链接:http://poj.org/problem?id=1068


Parencodings
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 25772 Accepted: 15159

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

264 5 6 6 6 69 4 6 6 6 6 8 9 9 9

Sample Output

1 1 1 4 5 61 1 2 4 5 1 1 3 9

Source

Tehran 2001

[Submit]   [Go Back]   [Status]   [Discuss]

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact A


题意:给出每个右括号前面有几个左括号,求每个右括号包含几个括号

解析:将左括号记为1,右括号记为2,存到一个数组里面,遍历数组时每遇到右括号i,然后往前找第一个没标记的左括号j,这个范围内包含了(i - j + 1) / 2

代码:


#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#include<cmath>#include<map>#include<vector>#include<stack>#define N 29using namespace std;const int INF = 0x3f3f3f3f;int a[N], b[N<<1], used[N<<1];int main(){    int t, n;    scanf("%d", &t);    while(t--)    {        scanf("%d", &n);        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);        int cnt = 0, cur = 0;        memset(used, 0, sizeof(used));        for(int i = 1; i <= n; i++)        {            while((cur++) < a[i]) b[cnt++] = 1;            b[cnt++] = 2;            cur = a[i];        }        int f = 0;        for(int i = 0; i < cnt; i++)        {            if(!used[i] && b[i] == 2)            {                for(int j = i - 1; j >= 0; j--)                {                    if(!used[j] && b[j] == 1)                    {                        used[j] = 1;                        a[f++] = (i - j + 1) / 2;                        break;                    }                }            }        }        for(int i = 0; i < n; i++)           printf("%d%c", a[i], i == n - 1 ? '\n' : ' ');    }    return 0;}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人行聘用制3年后怎么办 道路运输从业资格证过期了怎么办 码头如果要危险运输证怎么办? 7座车怎么办载客营运证 商调函到了原单位不配合怎么办 公司车辆超证了怎么办? 准迁证过期了5年怎么办 天津中派木业不发工资怎么办 在香港餐厅嫌冷怎么办 出国读研报到证怎么办 高中后出国留学档案怎么办 爱迪花园拆了怎么办 燕郊房子卖了户口怎么办 强制险单子丢了怎么办 车辆保险贴丢了怎么办 车险原单子丢了怎么办 车险保单丢了该怎么办? 审车保险单丢了怎么办 湖州公积金贷款买房具体信用怎么办 驾驶本扣分满了怎么办 摩托车被扣12分怎么办 驾照被扣12分怎么办 骑摩托被扣12分怎么办 摩托车没有驾照违章被扣分怎么办 高考登录密码丢了怎么办 高中档案遗失里面体检表怎么办 驾校不给补科一成绩单怎么办 外地驾照转广州体检表怎么办 驾照体检表签名签错怎么办 改完名字后护照怎么办 办健康证没有身份证怎么办 身份证掉了怎么办健康证 华师附小不搬了怎么办 健康证快到期了怎么办 老公想去日本打工怎么办 学生没有资产证明怎么办日本签证 在读证明学校不按模版怎么办 办日本签证没有户口本怎么办 日本大学留级续签失败怎么办 法国签证递交时间太晚怎么办 日本留学生签证更新拒签怎么办