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