当前位置: 代码迷 >> 综合 >> poj-1068-Parencodings
  详细解决方案

poj-1068-Parencodings

热度:50   发布时间:2023-12-19 11:33:25.0

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