zoj 1016 Parencodings
题目大意:
P序列表示每个右括号之前有几个左括号,
W序列表示每个右括号对应的整体括号里包含了几对括号包括本身。
输入p序列,转化为w序列。
思路:我这是很烦的,讲p转化成一堆括号的,再转化成w的。
ac代码:
#include "stdio.h" #include "string.h" int main() { int n,cas,i,j,p[25],w[25],right,left,temp,cnt; char s[100]; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(i=0; i<n; i++) scanf("%d",&p[i]); cnt=0; right=0; for(i=0; i<n; i++) { temp=p[i]; if(right<temp) { for(j=right; j<temp; j++) { s[cnt]='('; cnt++; } right=temp; s[cnt]=')'; cnt++; } else { s[cnt]=')'; cnt++; } } s[cnt]=0; temp=0; for(i=0; i<n; i++) { for(j=temp;j<2*n;j++) if(s[j]==')') break; temp=j+1; cnt=1; right=1; for(j=temp-2;j>=0;j--) { if(s[j]=='(') { right--; if(right==0) {w[i]=cnt;break;} } if(s[j]==')') {cnt++;right++;} } } for(i=0; i<n-1; i++) printf("%d ",w[i]); printf("%d\n",w[n-1]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/