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- ...
随机推荐
- Scanner和BufferedReader
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- UVa1593_Allgnment_Of_Code
/** start: integer; // begins hear stop: integer; // ends here s: string; c: char; // temp **/ //测试数 ...
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- c语言强制类型转换
一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf (" (float)3/(float)2 ...
- android中一个解决办法
E Trace(732): error opening trace file: No such file or directory (2)android api 的版本和模拟器的版本不一致导致的
- JAVA数据库基本操作 (转)
JAVA数据库基本操作指南 Java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接. 一.取得数据库连接 1.用DriverManager取数据库连接 ...
- mysql 只导数据不含表结构
mysqldump -t 数据库名 -uroot -p > xxx.sql
- 【Python】 用python实现定时数据解析服务(前言)
一.Why do it? 背景:项目里上传上来的数据都是未解析的数据,而且数据量还算挺庞大的,每天上传的数据有5kw左右,如果用数据库自带的作业来解析的话,数据库会造成严重的阻塞.因此打算把数据读到外 ...
- sql server 本地复制订阅 实现数据库服务器 读写分离(转载)
转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下S ...
- Delphi运算符总结
分类 运算符 操作 操作数 结果类型 范例 算术运算符(加法.减法和乘法运算符的结果为参加运算的两个数据中的精度高的类型) + 加 整数,实数 整数,实数 X + Y - 减 整数,实数 整数,实数 ...