关于括号的简单模拟题

description

给定一个括号字符数组S,S可以用两个整数数组P和W来描述,其中:

数组P中的元素Pi定义为:第i个右括号前面有Pi个左括号;

数组W中的元素Wi定义为,第i个右括号和其配对的左括号之间所包含的完整的括号的对数。

现在给你P数组,让你求出该字符数组S所对应的W数组。

比如下面这个例子 

	S		(((()()())))

	P	         4 5 6666

	W  	         1 1 1456

input

输入第一行是一个整数t (1 <= t <= 10), 表示有t组测试数据。每组数据第一行是一个整数n (1 <= n <= 20), 然后是P数组中的n个元素。

output

对于输入的每一个P数组,输出其对应的W数组

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

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int t,n,i,k;
  int a[20],b[20];
  scanf("%d",&t);
  while(t--)
 {
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    b[1]=1;
    for(i=2;i<=n;i++)
  {
    if(a[i]!=a[i-1])
    b[i]=1;
    else
   {
       k=i-1;
        while(a[i]-a[k]<i-k&&k>0)
        k--;
      b[i]= i-k;
   }
}
    for(i=1;i<=n;i++)
    printf("%d ",b[i]);
    printf("\n");
 }
  return 0;
}

posted @ 2015-05-22 16:41  茶飘香~  阅读(314)  评论(0编辑  收藏  举报