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- ...
随机推荐
- 【转】字符集和字符编码(Charset & Encoding)
相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"бЇЯАзЪСЯ"."�????????"?还记得HTTP中的Accept-Charset.Accept ...
- c语言强制类型转换
一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf (" (float)3/(float)2 ...
- UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃
UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃 [摘要:reason: '-[UITableView _conten ...
- python异步爬虫
本文主要包括以下内容 线程池实现并发爬虫 回调方法实现异步爬虫 协程技术的介绍 一个基于协程的异步编程模型 协程实现异步爬虫 线程池.回调.协程 我们希望通过并发执行来加快爬虫抓取页面的速度.一般的实 ...
- php 复习
<?php 一.php基础语法1.输出语句:echo print print_r var_dump() 2.php是弱类型语言强制转换类型: (类型)变量 settype(变量,类型) 3.变量 ...
- Nginx反向代理设置 从80端口转向其他端口
[root@localhost bin]# netstat -lnutp Active Internet connections (only servers) Proto Recv-Q Send-Q ...
- EasyUi – 1.入门
1.页面引用. jquery,easyui,主题easyui.css,图标ico.css,语言zh_CN.js <script src="Scripts/jquery-easyui-1 ...
- Java 初学记录之一 快速输入
1. sysout 按回车 System.out.println();
- JS判断输入值是否为正整数
JS中的test是原来是JS中检测字符串中是否存在的一种模式,JS输入值是否为判断正整数代码: <script type=”text/javascript”> function test( ...
- Android之Inflate()
Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. Android上还有一个与Inflate( ...