Description
S (((()()())))
P-sequence 4 5 6666
W-sequence 1 1 1456
Input
Output
Sample Input
2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
Sample Output
1 1 1 4 5 6 1 1 2 4 5 1 1 3 9
题意:给出p序列,求w序列。
p[]表示:当出现匹配括号对时,每个右括号前面有多少左括号
w[]表示:当出现匹配括号对时,该括号对中包含多少个右括号,包含本身
思路:根据 p 算出 每两个 右括号之间 有多少个 左括号,用 w 数组记录,然后 对每一个 右括号,往前搜索左括号
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 using namespace std; 7 int p[25],w[25]; 8 int main() 9 { 10 int t,n; 11 cin>>t; 12 while(t--) 13 { 14 memset(p,0,sizeof(p)); 15 memset(w,0,sizeof(w)); 16 cin>>n; 17 for(int i=1;i<=n;i++) 18 { 19 cin>>p[i]; 20 w[i]=p[i]-p[i-1]; 21 } 22 for(int i=1;i<=n;i++) 23 { 24 int j=i; 25 while(!w[j]&&j>1) 26 j--; 27 w[j]--; 28 if(i==1) 29 printf("%d",i-j+1); 30 else 31 printf(" %d",i-j+1); 32 } 33 printf("\n"); 34 } 35 return 0; 36 }
原文:http://www.cnblogs.com/cxbky/p/4850719.html