Poj_1068 Parencodings
S (((( )( )() ) ) )
P-sequence 4 5 6666,表示第i个右括号的左边有几个左括号。
W-sequence 1 1 1456,表示第i个右括号和以它为起点的序列中的第几个左括号配对。
问题:已知P序列求W序列。
解决:用字符串数组存放括号序列,再通过遍历和多个标号的出W序列。先找到第一个右括号,在遍历它的左边的括号序列,如果为左括号,则原来为1的标号indexz自减,用于计数的sum自加。如果为右括号则index自加。并每次都判断sum的值,如果为0,则W[0]序列的值为temp,并跳出循环。按照上述过程,依次找到以后的右括号,再执行上面的算法。
import java.util.Scanner;
/*把一个括号序列,从p表示形式转换成另一种表现形式w。*/
public class N1068 {
int times;
int len;
int[] p;
int[] w;
String[] s;
int index;
int temp;
int pos;
public N1068(){
Scanner cin=new Scanner(System.in);
times=cin.nextInt();
for(int i=0;i<times;i++){
len=cin.nextInt();
p=new int[len];
w=new int[len];
s=new String[2*len];
for(int j=0;j<len;j++){
p[j]=cin.nextInt();
}
pos=0;
temp=0;
index=0;
for(int k=0;k<len;k++){
for(;pos<p[k];pos++){
s[index++]="(";
}
s[index++]=")";
}
transform();
for(int m=0;m<len;m++){
System.out.print(w[m]+" ");
}
System.out.println();
}
}
public void transform(){
pos=0;
int k=0;
for(int i=0;i<len;i++){
for(;k<2*len;k++){
if(s[k].equals(")")){
pos=k;
k++;
break;
}
}
index=1;
temp=0;
for(int j=pos-1;;j--){
if(s[j].equals("(")){
index--;
temp++;
}else{
index++;
}
if(index==0){
w[i]=temp;
break;
}
}
}
}
public static void main(String[] args){
new N1068();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Poj_1068 Parencodings的更多相关文章
- [POJ1068]Parencodings
[POJ1068]Parencodings 试题描述 Let S = s1 s2...s2n be a well-formed string of parentheses. S can be enco ...
- Parencodings(imitate)
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20679 Accepted: 12436 De ...
- 模拟 POJ 1068 Parencodings
题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...
- Parencodings 分类: POJ 2015-06-28 22:00 7人阅读 评论(0) 收藏
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22757 Accepted: 13337 De ...
- hdu 1361 Parencodings 简单模拟
Parencodings 题意: 由括号序列S可经P规则和W规则变形为P序列和W序列. p规则是:pi是第i个右括号左边的左括号的数: w规则是:wi是第i右括号与它匹配的左括号之间右括号的数(其中包 ...
- POJ 1068 Parencodings
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24932 Accepted: 14695 De ...
- Poj OpenJudge 1068 Parencodings
1.Link: http://poj.org/problem?id=1068 http://bailian.openjudge.cn/practice/1068 2.Content: Parencod ...
- POJ1068——Parencodings
Parencodings Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encode ...
- PO1068 Parencodings 模拟题
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28860 Accepted: 16997 De ...
随机推荐
- 【Python基础】之不同的文件在不同目录下导入指定模块的方法
如下图三个文件的目录路径 – project |– 1 | |– 2 | | |– 3 | | | |– owen.py ...
- 小程序踩坑之不同屏幕下动态改变translate值
案例还原 小程序做一个进度条,可以通过拽转控制进度 那么肯定有一个进度条,不过小程序自己会做适配宽高 6s下这个div的width 是250 6splus就是276 但是问题来了,我拖拽用的是tran ...
- x86 的 TSS 任务切换机制
转自:http://blog.chinaunix.net/uid-587665-id-2732907.html [0]写在前面 segment descriptors 构建保护模式下的最基本.最根本的 ...
- Spring Cloud 微服务一:Consul注册中心
Consul介绍 Consul is a service mesh solution providing a full featured control plane with service disc ...
- Android Apk包下查看 sha1
用keytool工具查看sha1,格式如下:keytool -printcert -file Urovo.RSA文件路径(APK解压后在Meta-INF文件夹下)
- 九度OJ 1063:整数和 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3456 解决:2254 题目描述: 编写程序,读入一个整数N. 若N为非负数,则计算N到2N之间的整数和: 若N为一个负数,则求2N到N之间 ...
- linux c编程:gdb的使用
首先用一个简单的打印字符的程序来做下示例 #include<stdio.h>#include<string.h>void main(){ int i=0; char ...
- 打开蓝牙debug hci log
Android4.2之前抓取hci log都是通过hcidump命令完成的,但是Android4.2 Bluetooth引入了Bluedroid,这是一个新的蓝牙协议栈.所以抓取hci log的方法也 ...
- g2o的一般过程
1.自己定义顶点类.边类或者用已经有的.1.1定义顶点例子class CurveFittingVertex: public g2o::BaseVertex<3, Eigen::Vector3d& ...
- HDU2296 Ring —— AC自动机 + DP
题目链接:https://vjudge.net/problem/HDU-2296 Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...