题意:P=每个右括号前面的左括号,W=每个右括号所在的括号包含的完整括号数,包括其本身。已知P,求W。
模拟题,将原括号按照数据呈现出来,用数组记录。
然后用递归求出W,递归的出口为右括号,当为左括号时,对s进行叠加,即所包含的括号数。为右括号时,记录下W,并返回一个s。
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 int p[100],w[100]; 6 char a[100]; 7 int i,j; 8 int f 9 { 10 int s=1; 11 while(1) 12 { 13 if(a[j]=='(') 14 { 15 j++; 16 s+=f; 17 } 18 else 19 { 20 w[i++]=s; 21 j++; 22 return s; 23 } 24 } 25 } 26 main 27 { 28 int n,N,k,q; 29 scanf("%d",&N); 30 while(N--) 31 { 32 scanf("%d",&n); 33 for(q=0,k=0,i=0;i<n;i++) 34 { 35 scanf("%d",&p[i]); 36 for(j=0;j<p[i]-k;j++) 37 { 38 a[q]='('; 39 q++; 40 } 41 k=p[i]; 42 a[q++]=')'; 43 } 44 i=0;j=0; 45 f; 46 for(i=0;i<n;i++) 47 { 48 printf("%d ",w[i]); 49 } 50 printf("\n"); 51 } 52 }
View Code
本文暂时没有评论,来添加一个吧(●'◡'●)