zoukankan      html  css  js  c++  java
  • ZOJ Problem Set

    ZOJ Problem Set - 1016
     Parencodings

    Time Limit: 2 Seconds                                     Memory Limit: 65536 KB                            

    Let S = s1 s2 ... s2n be a well-formed string of parentheses. S can be encoded   in two different ways:

    • 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).
    • 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

      The first line of the input contains a single integer t (1  <=  t  <=  10), the number   of test cases, followed by the input data for each test case. The first line   of each test case is an integer n (1  <=  n  <=  20), and the second line is the P-sequence   of a well-formed string. It contains n positive integers, separated with blanks,   representing the P-sequence.


    Output

      The output consists of exactly t lines corresponding to test cases. For each   test case, the output line should contain n integers describing the W-sequence   of the string corresponding to its given P-sequence.


    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

    先构建括号然后再查找w序列

    AC代码:

    #include<iostream>
    #include<stdio.h>
    #include<string>
    using namespace std;
    string p;
    void add(int num)
    {
    	int len=p.length();
    	for(int i=0;i<len;i++)
    	{
    		if(p[i]=='(')num--;
    	}
    	while(num--)
    	{
    		p+='(';
    	}
    	p+=')';
    }
    int main()
    {
        int cas;
        cin>>cas;
    	while(cas--)
    	{
    		int n;
    		cin>>n;
    		int *num1=new int[n];
    		p="";
    		for(int i=0;i<n;i++)//构建括号 
    		{
    			cin>>num1[i];
    			add(num1[i]);
    		}
    	//	cout<<p<<endl;
    		//构建w序列
    		int len=p.length();
    		int start=0;
    		int k=0;
    		int w[100];
    		for(int i=start;i<len;i++)
    		{
    			int sum=1;
    			int count=0;
    			if(p[i]==')')
    			{
    				start=i+1;
    				for(int j=i-1;j>=0;j--)
    				{
    					if(p[j]=='(')
    					{
    						sum--;
    						count++;
    					}
    					if(p[j]==')')
    					{
    						sum++;
    					}
    					if(sum==0)
    					{
    					 w[k++]=count;//找到匹配括号 
    					 break;//开始寻找下一个匹配括号 
    					}
    				}
    			}
    		}
    		for(int i=0;i<k;i++)
    		{
    			cout<<w[i];
    			if(i==k-1)cout<<endl;
    			else cout<<' ';
    		}
    	} 
    } 


     

  • 相关阅读:
    Spring Boot使用事务不起作用
    Spring的相关注解
    Spring Boot应用启动的三种方式
    Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
    Mysql密码忘记怎么修改?
    第二篇Scrum冲刺博客
    第一篇Scrum冲刺博客
    团队作业4——项目冲刺
    团队作业3--需求改进&系统设计
    项目规范
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3366507.html
Copyright © 2011-2022 走看看