今天看了一下 杰哥的ACM 总结,感觉以后自己写博客的时候需要 结合 别人的思路和自己的思路进行一些总结,只有这样,才能够有一些提升。
这个题的话,自己AC之后看了一下网上别人的代码,大同小异,思路都差不多
#include<cstdio>
#include<cstring>
#include<iostream>
#include<stack>
using namespace std;
#define N 300
int main(){
int T;
scanf("%d",&T);
for(int Case = 1; Case <= T; Case++){
int n;
scanf("%d",&n);
int array[N];
for(int i = 0; i < n ; i++)
scanf("%d",&array[i]);
int ans[N] = {0};
char s1[N];
int x = 0,top = 0;
for(int i = 0 ; i < n ; i++){
int t = array[i] - x;
for(int j = 0; j < t ; j++)
s1[top++] = '(';
s1[top++] = ')';
x = array[i];
}
int num[N],topx = 0;
for(int i = top - 1, k = 0 , t = n; i >= 0; i--){
if(s1[i] == ')'){
num[k++] = t;
t--;
}
else if(s1[i] == '('){
for(int j = 0 ; j < k ; j++){
ans[num[j]] ++;
}
k--;
}
}
for(int i = 1 ; i <= n ; i++){
printf("%d",ans[i]);
if(i < n) printf(" ");
}
printf("\n");
}
return 0 ;
}