zoukankan      html  css  js  c++  java
  • poj 1068

    题意:给定p数组 让求w数组

          p数组;

    S		        (((()()())))
    
    P-sequence 4 5 6666//)括号 左边(括号的个数
    W-sequence 1 1 1456//)括号所匹配的括号中的括号对数
    用一个栈来模拟
    #include<iostream>
    using namespace std;
    int p[55];
    int w[55];
    int y[55];
    int stack[55];
    int main()
    {
    	int t,i,top,wi,n,j,k;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(i=0;i<n;i++)
    			cin>>p[i];
    		//(-------1
    		//)-------0
    		j=0;
    		for(j=0,i=0;j<n;j++)
    		{
    			for(i;i<p[j]+j;i++)
    				y[i]=1;
    			y[i]=0;   //先把括号存起来
    			i++;
    		}
    		top=-1;
    		int sum;
    		wi=0;
    		for(i=0;i<2*n;i++)
    		{
    			if(y[i]==1)//若是(括号直接存起来
    			{
    				stack[++top]=1;
    				continue;
    			}
    		    sum=0;         //若是)则查找与之匹配的左括号并在匹配除标记   
    			for(k=top;stack[k]!=1&&k>=0;k--)
    				sum++;
    			stack[k]=-1;
    			w[wi++]=sum+1;
    		}
    		for(i=0;i<n-1;i++)
    			cout<<w[i]<<" ";
    		cout<<w[n-1]<<endl;
    	}
    	return 0;
    }
    
    
    
    		
    

  • 相关阅读:
    SpringBoot详解(二)——
    SpringBoot详解(一)——
    数据库三大范式
    Mysql备份
    mysql索引
    mysql事务
    几种数据库查找的案例
    点击加载更多
    layer、弹出框
    验证码倒计时
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3753819.html
Copyright © 2011-2022 走看看