NUC_HomeWork1 -- POJ1068
Description
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
Output
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
- #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的更多相关文章
- [POJ1068]Parencodings
[POJ1068]Parencodings 试题描述 Let S = s1 s2...s2n be a well-formed string of parentheses. S can be enco ...
- POJ-1068 Parencodings---模拟括号的配对
题目链接: https://vjudge.net/problem/POJ-1068 题目大意: 给出一种括号序列的表示形式名叫P序列,规则是统计出每个右括号之前的左括号个数作为序列每项的值.然后要求你 ...
- POJ-1068题
下面的代码是北京大学Online Judge网站上1068题(网址:http://poj.org/problem?id=1068)的所写的代码. 该题的难点在于实现括号匹配,我在代码中采取用-1和1分 ...
- poj1068
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18785 Accepted: 11320 De ...
- [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...
- NUC_HomeWork1 -- POJ1088(DP)
D - 滑雪 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Mic ...
- NUC_HomeWork1 -- POJ2067(最短路)
C - Fire Station Description A city is served by a number of fire stations. Some residents have comp ...
- poj1068 模拟
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25010 Accepted: 14745 De ...
- poj1068解题报告(模拟类)
POJ 1068,题目链接http://poj.org/problem?id=1068 题意: 对于给出给出的原括号串S,对应两种数字密码串P.W: S (((()()()))) P- ...
随机推荐
- 简易qq对话框
//本程序由QT5 creator编译可运行 //dialog.h 1 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> class ...
- MysqlDumpslow
可以帮助分析慢查询. 选项: -n 10 列出最近10条慢查询 如: mysqldumpslow
- 手写代码自动实现自动布局,即Auto Layout的使用
手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...
- MyString(重写String)
http://wenku.baidu.com/view/d7ac113243323968011c925b.html 已知类String的原型为: class String { public: ...
- LeetCode : 223. Rectangle Area
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABRQAAAQ0CAYAAAAPPZBqAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVlw
- NYOJ题目113字符串替换
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAAHvCAIAAAA930vtAAAgAElEQVR4nO3dPVLjysIG4G8T5CyE2A ...
- javascript - 事件详解
一.事件流 1.事件流 描述的是在页面中接受事件的顺序 2.事件冒泡 由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点 (最具体 –> 最不具体) 3.事件捕获 最不具体的节点先接收事 ...
- ASP.NET Web API 使用Swagger生成在线帮助测试文档
Swagger-UI简单而一目了然.它能够纯碎的基于html+javascript实现,只要稍微整合一下便能成为方便的API在线测试工具.项目的设计架构中一直提倡使用TDD(测试驱动)原则来开发,sw ...
- Linux中exec()执行文件系列函数的使用说明
函数原型: 描述: exec()系列函数使用新的进程映像替换当前进程映像. 工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明: 1. 这6个函数可分为两大类: execl( ...
- jquery中ajax的简单使用
一.load() 这是最简单的一个函数,传入一个url他会异步加载该url的内容,然后将内容插入每一个选中的元素中,替换掉其中已经存在的内容. 所以最简单的用法是: $("#myDiv&qu ...