poj 1068 Parencodings
题意:
1.p序列:当出现匹配括号对时,从该括号对的右括号開始往左数,直到最前面的左括号数,就是pi的值。
2.w序列:当出现匹配括号对时,包括在该括号对中的全部右括号数(包括该括号对),就是wi的值。
思路:通过pi的值,能够构造出原括号序列。然后再计算wi值,计算wi时,每次匹配了的括号记得标记,
能够用l表示已匹配的左括号,用r表示匹配了的右括号
#include<stdio.h> int main() { int p[25],i,j,k,n,a,T,t; char s[50]; scanf("%d",&T); while(T--){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&p[i]); for(k=1;k<=p[1];k++) s[k]='('; s[k++]=')'; for(i=2;i<=n;i++){ j=0; while(j!=p[i]-p[i-1]){ s[k++]='('; j++; } s[k++]=')'; } j=a=1; for(i=p[1]+1;i<k;i++){ if(s[i]==')'){ s[i]='r'; for(t=i-1;t>=1;t--){ if(s[t]==')'||s[t]=='r') a++; else if(s[t]=='('){ s[t]='l'; break; } } if(j!=n) printf("%d ",a); else printf("%d\n",a); a=1; j++; } } } return 0; }