POJ1068 --(模拟)
这题是在看一个书的时候的一个例题,当时并不明白啥意思,于是便找了下原题,以前没在POJ上刷过,这是开了个头,以后努力刷这个网站
题目大概意思是:http://poj.org/problem?id=1068
1.p序列:当出现匹配括号对时,从该括号对的右括号开始往左数,直到最前面的左括号数,就是pi的值。
2.w序列:当出现匹配括号对时,包含在该括号对中的所有右括号数(包括该括号对),就是wi的值。
要求给定加密后的p数组,求出w数组。
可以根据给的p数组先求出字符串s, p[i]-p[i-1]为第i个右括号紧跟在它前面的有多少个左括号,求出s,这里用了一点小技巧,大家以后可以试试,即是括号对用01序列表示
遍历s,每次找到右括号,然后回溯,遇到右括号就计数(回溯前找到的那个也算),直到遇到与它匹配的左括号(vis[]=false),因为一个右括号有唯一的左括号匹配,所以一旦找到它的左括号,就用vis[]=true标记下。
之前我看的是C语言代码,然后用java交总是错,最后发现是数组越界问题,改正后提交正确
import java.util.Arrays;
import java.util.Scanner; public class Main4 { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int p[]=new int [21];
int w[] = new int [21]; boolean vis[]= new boolean [42]; int t = sc.nextInt();
while(t-->0){ String s = "";
int n = sc.nextInt();
for(int i=1;i<=n;i++)
p[i] = sc.nextInt();
p[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=p[i]-p[i-1];j++)
s+="(";
s+=")";
} int k=1;
Arrays.fill(vis,false);
for(int i=0;i<2*n;i++){
int cnt=1;
if(s.charAt(i)==')'){ for(int j=i-1;j>=0;j--){
if(s.charAt(j)==')')
cnt++;
if(s.charAt(j)=='('&&!vis[j])
{
vis[j]=true;
break;
} }
w[k++]=cnt;
}
} for(int i=1;i<=n;i++)
System.out.print(w[i]+" ");
System.out.println();
}
} }
不过看博客有大佬这样定义,把括号对用01序列表示,也很不错哦,附上代码: http://user.qzone.qq.com/289065406/blog/1299127551
POJ1068 --(模拟)的更多相关文章
- poj1068 模拟
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25010 Accepted: 14745 De ...
- [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...
- poj1068解题报告(模拟类)
POJ 1068,题目链接http://poj.org/problem?id=1068 题意: 对于给出给出的原括号串S,对应两种数字密码串P.W: S (((()()()))) P- ...
- [poj1068]Parencodings_模拟
Parencodings 题目大意:给你一个P序列,表示从左到右的右括号左边有多少左括号,求M序列. 注释:M序列定义为每一个右括号左边最近的没有被之前的右括号匹配的括号之间,有多少已经匹配的括号队对 ...
- POJ1068 Parencodings(模拟)
题目链接. 分析: 水题. #include <iostream> #include <cstdio> #include <cstring> using names ...
- poj1068 【模拟】
Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: ...
- POJ-1068 Parencodings---模拟括号的配对
题目链接: https://vjudge.net/problem/POJ-1068 题目大意: 给出一种括号序列的表示形式名叫P序列,规则是统计出每个右括号之前的左括号个数作为序列每项的值.然后要求你 ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
随机推荐
- [转]docker安装elk
来源 https://www.jianshu.com/p/f549017c4b60 问题:virtual memory areas vm.max_map_count [65530] likely ...
- 总结Flink状态管理和容错机制
本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发. 本文主要内容如 ...
- 【Android】Android 监听apk安装替换卸载广播
[Android]Android 监听apk安装替换卸载广播 首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDE ...
- python --判断列表重复
一.判断单个列表中的元素是否存在重复 使用set方法去重后,和原list进行对比,如果相等,那么说明原列表无重复,如果存在重复,说明列表存在重复 def is_repect_all(L): repea ...
- NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...
- P1220 关路灯 区间dp
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- hdu 2091空心三角形
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果. Input每行包含 ...
- TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值—Jason niu
#TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值 import tensorflow as tf input1 = tf.placeholder ...
- 分布式服务框架XXL-RPC
<分布式服务框架XXL-RPC> 一.简介 1.1 概述 XXL-RPC 是一个分布式服务框架,提供稳定高性能的RPC远程服务调用功能.拥有"高性能.分布式.注册中心. ...
- [ 中危 ] 发布处存在CSRF及CSRF设想
漏洞存在于菜品发布处,使用A账号在添加/发布菜品的时候拦截数据包,使用burpsuite构造 CSRF的POC,再用B账号打开该HTML POC ,生成菜品. 该CSRF400RMB,主要因为是核心业 ...