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;
}
上一篇:spring+hibernate整合:报错org.hibernate.HibernateException: No Session found for current thread


下一篇:Mac中编译安装Qt 4.4