根据 题目,给出 p数列,要求 w数列。
我的思路是 根据 p 算出 每两个 右括号之间 有多少个 左括号,用 lp数组记录,然后 对每一个 右括号,往前搜索左括号
比如 p 4 5 6 6 6 6 ,那么 lp 值为 4 1 1 0 0 0
从第一个 右括号开始找,第一个对应 lp 第一个,发现lp不为 0 ,即将 lp-1,算出相应前面有多少个 右括号即可,若lp为 0 继续往前扫。。
#include<cstdio>
#include<cstring>
#define for if(0);else for
int p[25]={0};
int lp[25];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&p[i]);
}
for(int i=1;i<=n;i++){
lp[i]=p[i]-p[i-1];
}
for(int i=1;i<=n;i++){
int j=i;
while(!lp[j]&&j>1){
j--;
}
lp[j]--;
printf("%d%c",i-j+1,i==n?'\n':' ');
}
}
return 0;
}