A - Parencodings

Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u

Submit Status

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
 今天wj说,这道题模拟就好,用不了多长时间,结果我想了一晚上,用递推的方法做的,不知道他是怎么想的,能A出来,很开心
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = ; void print(int ans[], int n)///打印函数,其实是在中间查错的时候写的,后来就直接用了
{
printf("%d", ans[]);
for(int i = ; i <= n; ++i)
{
printf(" %d", ans[i]);
}
puts("");
} int main()
{
#ifdef LOCAL ///重定向第一发忘记删了,错了T_T
freopen("in.txt", "r", stdin);
#endif
int t, n;
int arr1[maxn], arr2[maxn], ans[maxn];///我的想法是,预处理arr2数组用以放在此坐标左侧有几个半括号
bool tag[maxn]; ///预处理ans数组,每次值变化,都会从“1”开始,然后就处理不是“1”的值
scanf("%d", &t); ///用tag数组标记被处理过的值,
while(t--)
{
memset(tag, false, sizeof(tag));
scanf("%d", &n);
for(int i = ; i <= n; ++i)
scanf("%d", &arr1[i]); ans[] = ;
arr2[] = arr1[] - ;
for(int i = ; i <= n; ++i) ///进行一次预处理,将所有为 “1” 的情形记录
{
arr2[i] = arr1[i] - arr1[i-] - ;
arr2[i] = (arr2[i] < ) ? : arr2[i];
ans[i] = (arr1[i] > arr1[i-]) ? : ;
} int i, k;
int sum = ;
for(i = ; i <= n; ++i)
{
if(ans[i] == )
{
for(k = i-; k > ; --k) ///往前找无非两种情况可以累加
{ ///没有被标记过的且arr2值为0,和没有被标记过的且arr2值不为0
if((tag[k] == false) && (arr2[k] == ))
{
sum += ans[k];
tag[k] = true; ///刚开始也DB了, 用于 “==”,查了半天
}
else if((tag[k] == false) && arr2[k])
{
arr2[i] = --arr2[k];
arr2[k] = ;
sum += ans[k] + ; ///找到arr2值不为‘0’,就arr2值转移到 i 身上。到这步就到底了
tag[k] = true;
//printf("%d\n", arr2[i]);
break;
}
}
ans[i] = sum;
sum = ;
}
} print(ans, n);
}
return ;
}
 

NUC_HomeWork1 -- POJ1068的更多相关文章

  1. [POJ1068]Parencodings

    [POJ1068]Parencodings 试题描述 Let S = s1 s2...s2n be a well-formed string of parentheses. S can be enco ...

  2. POJ-1068 Parencodings---模拟括号的配对

    题目链接: https://vjudge.net/problem/POJ-1068 题目大意: 给出一种括号序列的表示形式名叫P序列,规则是统计出每个右括号之前的左括号个数作为序列每项的值.然后要求你 ...

  3. POJ-1068题

    下面的代码是北京大学Online Judge网站上1068题(网址:http://poj.org/problem?id=1068)的所写的代码. 该题的难点在于实现括号匹配,我在代码中采取用-1和1分 ...

  4. poj1068

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18785   Accepted: 11320 De ...

  5. [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)

    Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...

  6. NUC_HomeWork1 -- POJ1088(DP)

    D - 滑雪 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Mic ...

  7. NUC_HomeWork1 -- POJ2067(最短路)

    C - Fire Station Description A city is served by a number of fire stations. Some residents have comp ...

  8. poj1068 模拟

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25010   Accepted: 14745 De ...

  9. poj1068解题报告(模拟类)

    POJ 1068,题目链接http://poj.org/problem?id=1068 题意: 对于给出给出的原括号串S,对应两种数字密码串P.W: S         (((()()()))) P- ...

随机推荐

  1. sql server 时间小汇

    SQL server DATE函数 (1)getdate   返回当前系统的日期和时间,精确到3毫秒 要求:获得系统的当前时间 语句:SELECT getdate() 执行结果: 注:getutcda ...

  2. Java -- File

    @.getPath().getAbsolutePath().getCanonicalPath()区别 原文:http://blog.csdn.net/wh_19910525/article/detai ...

  3. 微信token验证失败的解决方法

    一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...

  4. Application.ProcessMessages用法

    参考:http://cqujsjcyj.iteye.com/blog/380926 我想你可能还有点模糊.举个例子容易明白:假如你的窗体上有两个按钮,一个“计算”,一个“停止”, 如果你的计算是密集运 ...

  5. Delphi中exit、break、continue等跳出操作的区别

    Delphi中表示跳出的有break,continue,abort,exit,halt,runerror等 1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环) ...

  6. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  7. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  8. HTML5_Canvas_属性、定义及方法

    一.简单图形,整套的属性和方法专门用于绘制矩形:1.fillStyle可以设置为CSS颜色.一个图案或一种颜色渐变.fillStyle默认是纯黑色,你可以设置成你喜欢的任意颜色.只要页面打开着,每个绘 ...

  9. Solr入门之(8)中文分词器配置

    Solr中虽然提供了一个中文分词器,但是效果很差,可以使用IKAnalyzer或Mmseg4j 或其他中文分词器. 一.IKAnalyzer分词器配置: 1.下载IKAnalyzer(IKAnalyz ...

  10. RTCP资料详解

    转自:http://www.360doc.com/content/13/0606/10/1317564_290865866.shtml RTCP RTCP协议将控制包周期发送给所有连接者,应用与数据包 ...