题目大意:有两串数字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; }