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 |
264 5 6 6 6 69 4 6 6 6 6 8 9 9 9 |
sample_output |
1 1 1 4 5 61 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;}