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;
}
原文地址:https://www.cnblogs.com/naive/p/3568718.html