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;
}