关于括号的简单模拟题
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;
}