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;
}