1A的一道题目,很兴奋,看样子我还是比较合适做模拟的。
题意:
给出一组括号: (((()()())))
P是”)“前面有几个“(”: 4 5 6 6 6 6
S是“)”前面第几个“(”是对应的: 1 1 1 4 5 6
让你根据给出的P求对应的S、
做法:
先根据P做出原先的括号顺序,然后根据原先的括号顺序做出S。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m,xi,num,top,x,hi;
int i,j,leap;
int stack[100];
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
top=0;
hi=0;
for(i=0;i<m;i++)
{
scanf("%d",&x);
num=x-top;
for(j=0;j<num;j++)
{
stack[hi++]=1;
}
stack[hi++]=0;
top=x;
}
xi=0;
int leap_sum=0;
for(i=0;i<hi;i++)
{
if(stack[i]==0)
{
leap=0;
for(j=i;j>=0;j--)
{
if(stack[j]==0)xi++,leap++;
else xi--;
if(xi==0)
{
printf("%d",leap);
leap_sum++;
if(leap_sum!=m)printf(" ");
else printf("\n");
break;
}
}
}
}
}
return 0;
}