http://poj.org/problem?id=1068
题意:其实这道题很直接,p是每一个)之前有多少(,w是一个()内包括自身有多少个()。
思路:直接的模拟:1 还原括号。2:找出w。
可以用一个数组0,1来模拟)(。
#include<cstdio>
#include<cstring>
int main()
{
// freopen("in.txt","r",stdin);
int a[200],b[200];
int ncase;
scanf("%d",&ncase);
while(ncase--){
memset(b,0,sizeof(b));
int n,temp;
int j = 0,remember = 0;
scanf("%d",&n);
for(int i = 0;i < n ;i++){ //转化为0,1
scanf("%d",&temp);
while(remember < temp){
a[j++] = 0;
remember++;
}
a[j++] = 1;
}
for(int i = 0;i < j; i++){
int ans = 2;
if(a[i] == 1){
for(int k = i - 1; ; k--){
if(a[k] == 0 && b[k] == 0){
b[k] = 3;
break;
}
else ans++; //非0即3
}
printf("%d ",ans/2); //左右括号的一半
}
}
printf("\n");
}
return 0;
}