• ZOJ 1016 Parencodings


    原题链接

    题目大意:有两串数字P和W。数组P中,数字P[i]表示第i个右括号之前的左括号个数。数组W中,数字W[i]表示在第i个右括号和与它匹配的左括号之间的右括号的个数(包括本身)。给出一个数组P,求对应的数组W。

    解法:开辟一个和括号对数相同大小的数组flag[],初始化0。从P数组读入一个数字a,若flag[a]不等于0,说明对应的左括号已经被用了,继续往前查找,直到找到第一个0.两个元素的下标之差+1就是他们间隔的右括号个数。

    参考代码:

    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    int main(){
    	int i,j,m,n,a,b;
    	cin>>m;
    	for(i=0;i<m;i++){
    		cin>>n;
    		int flag[20]={0};
    		cin>>a;
    		flag[a-1]=1;
    		cout<<'1';
    		for(j=1;j<n;j++){
    			cin>>a;
    			b=a;
    			while(flag[a-1])
    				a--;
    
    			flag[a-1]=1;
    			b=b-a+1;
    			cout<<' '<<b;
    		}
    		cout<<endl;
    	}
    
    
    
    	return 0;
    }
  • 相关阅读:
    polya定理
    树状数组
    离散数学通路数的矩阵计算法
    高次同余方程求解
    Uva1378
    poj2888
    poj2409&&poj1286
    poj2182
    poj2154
    判断一个字符是否为汉字
  • 原文地址:https://www.cnblogs.com/naive/p/3568718.html
Copyright © 2020-2023  润新知