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:

  1. S (((()()())))

  2. 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

  1. 2
  2. 6
  3. 4 5 6 6 6 6
  4. 9
  5. 4 6 6 6 6 8 9 9 9

Sample Output

  1. 1 1 1 4 5 6
  2. 1 1 2 4 5 1 1 3 9
 今天wj说,这道题模拟就好,用不了多长时间,结果我想了一晚上,用递推的方法做的,不知道他是怎么想的,能A出来,很开心
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. const int maxn = ;
  7.  
  8. void print(int ans[], int n)///打印函数,其实是在中间查错的时候写的,后来就直接用了
  9. {
  10. printf("%d", ans[]);
  11. for(int i = ; i <= n; ++i)
  12. {
  13. printf(" %d", ans[i]);
  14. }
  15. puts("");
  16. }
  17.  
  18. int main()
  19. {
  20. #ifdef LOCAL ///重定向第一发忘记删了,错了T_T
  21. freopen("in.txt", "r", stdin);
  22. #endif
  23. int t, n;
  24. int arr1[maxn], arr2[maxn], ans[maxn];///我的想法是,预处理arr2数组用以放在此坐标左侧有几个半括号
  25. bool tag[maxn]; ///预处理ans数组,每次值变化,都会从“1”开始,然后就处理不是“1”的值
  26. scanf("%d", &t); ///用tag数组标记被处理过的值,
  27. while(t--)
  28. {
  29. memset(tag, false, sizeof(tag));
  30. scanf("%d", &n);
  31. for(int i = ; i <= n; ++i)
  32. scanf("%d", &arr1[i]);
  33.  
  34. ans[] = ;
  35. arr2[] = arr1[] - ;
  36. for(int i = ; i <= n; ++i) ///进行一次预处理,将所有为 “1” 的情形记录
  37. {
  38. arr2[i] = arr1[i] - arr1[i-] - ;
  39. arr2[i] = (arr2[i] < ) ? : arr2[i];
  40. ans[i] = (arr1[i] > arr1[i-]) ? : ;
  41. }
  42.  
  43. int i, k;
  44. int sum = ;
  45. for(i = ; i <= n; ++i)
  46. {
  47. if(ans[i] == )
  48. {
  49. for(k = i-; k > ; --k) ///往前找无非两种情况可以累加
  50. { ///没有被标记过的且arr2值为0,和没有被标记过的且arr2值不为0
  51. if((tag[k] == false) && (arr2[k] == ))
  52. {
  53. sum += ans[k];
  54. tag[k] = true; ///刚开始也DB了, 用于 “==”,查了半天
  55. }
  56. else if((tag[k] == false) && arr2[k])
  57. {
  58. arr2[i] = --arr2[k];
  59. arr2[k] = ;
  60. sum += ans[k] + ; ///找到arr2值不为‘0’,就arr2值转移到 i 身上。到这步就到底了
  61. tag[k] = true;
  62. //printf("%d\n", arr2[i]);
  63. break;
  64. }
  65. }
  66. ans[i] = sum;
  67. sum = ;
  68. }
  69. }
  70.  
  71. print(ans, n);
  72. }
  73. return ;
  74. }
 

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. 简易qq对话框

    //本程序由QT5 creator编译可运行 //dialog.h 1 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> class ...

  2. MysqlDumpslow

    可以帮助分析慢查询. 选项: -n 10 列出最近10条慢查询 如: mysqldumpslow

  3. 手写代码自动实现自动布局,即Auto Layout的使用

    手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...

  4. MyString(重写String)

    http://wenku.baidu.com/view/d7ac113243323968011c925b.html 已知类String的原型为: class String  { public:     ...

  5. LeetCode : 223. Rectangle Area

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABRQAAAQ0CAYAAAAPPZBqAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVlw

  6. NYOJ题目113字符串替换

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAAHvCAIAAAA930vtAAAgAElEQVR4nO3dPVLjysIG4G8T5CyE2A ...

  7. javascript - 事件详解

    一.事件流 1.事件流 描述的是在页面中接受事件的顺序 2.事件冒泡 由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点 (最具体 –> 最不具体) 3.事件捕获 最不具体的节点先接收事 ...

  8. ASP.NET Web API 使用Swagger生成在线帮助测试文档

    Swagger-UI简单而一目了然.它能够纯碎的基于html+javascript实现,只要稍微整合一下便能成为方便的API在线测试工具.项目的设计架构中一直提倡使用TDD(测试驱动)原则来开发,sw ...

  9. Linux中exec()执行文件系列函数的使用说明

    函数原型: 描述:    exec()系列函数使用新的进程映像替换当前进程映像.    工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明:    1. 这6个函数可分为两大类: execl( ...

  10. jquery中ajax的简单使用

    一.load() 这是最简单的一个函数,传入一个url他会异步加载该url的内容,然后将内容插入每一个选中的元素中,替换掉其中已经存在的内容. 所以最简单的用法是: $("#myDiv&qu ...