poj 1068 Parencodings(模拟)
http://poj.org/problem?id=1068
题意:输入一组数表示左边有几个括号,输出一组数表述该右括号里搭配好了几个括号
#include<stdio.h> const int MAXN=10000; int main() { int T,i,j,n,tes,cas,t; int right,left; char str[MAXN]; scanf("%d",&T); int a[MAXN],rem[MAXN*5]; while(T--) { tes=cas=0; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } for(i=1;i<=n;i++) { t=a[i]-a[i-1];//有几个做括号 while(t--) { str[cas++]='('; } str[cas++]=')'; } for(i=0;i<cas;i++) { if(str[i]==')') { right=1; left=0; for(j=i-1;j>=0;j--) { if(right==left) break;//做括号和右括号个数匹配,就说明完整了 if(str[j]=='(') left++; else if(str[j]==')') right++; } rem[tes++]=right; } } for(i=0;i<n;i++) { if(i) printf(" "); printf("%d",rem[i]); } printf("\n"); } return 0; }