• 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();
    	 }
     }
     
     
     
     
     
     
     
     


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    L309 单音节词读音规则(一)-辅音字母发音规则
    L308 New brain cells made throughout life
    L306 词汇题
    L305 发邮件15分钟
    L304 What Is Death?
    2019.3.22 Week 11 : ZigBee power test and field test
    L302 如何避免秃头
    2019.3.22 Week 12 : ZigBee and T/H chamber test
    L300 3月英语课下
    Pycharm使用方法之调整代码字体大小
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4734223.html
Copyright © 2020-2023  润新知