模拟能力太水,做了挺长时间
还原括号数组,令r=1,num=0,从“(”向前扫,遇到“(”,r--,num++;遇到“)”r++,r为0是num即为解
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int n,t,r,num,i,j,b[25];
6 bool c[100];
7 scanf("%d",&t);
8 for(int tt=1;tt<=t;tt++)
9 {
10 memset(c,0,sizeof(c));
11 scanf("%d",&n);
12 for(i=1;i<=n;i++){scanf("%d",&b[i]);c[i+b[i]]=1;}
13 for(i=1;i<=n;i++)
14 {
15 num=0;r=1;j=i+b[i]-1;
16 while(r!=0)
17 {
18 if(c[j]==0){r--;num++;}
19 else r++;
20 j--;
21 }
22 printf(i==1?"%d":" %d",num);
23 }
24 printf("\n");
25 }
26 return 0;
27 }