当前位置: 代码迷 >> 综合 >> 【poj1048 Parencodings】(模拟水题)
  详细解决方案

【poj1048 Parencodings】(模拟水题)

热度:86   发布时间:2024-01-04 11:54:16.0

链接:http://poj.org/problem?id=1068

题意:给出一串数组:a[i]表示第i个右括号前面有几个左括号,求出每个右括号所包含的括号数

分析:模拟。根据已知的数组,模拟得到一个字符串数组,再模拟每个右括号的括号数

代码:

#include<cstdio>
#include<queue>
using namespace std;const int maxn=1000006;
int t;
int n;
int a[maxn];
int vis[maxn];
char s[maxn];
queue<int>q;int main(){scanf("%d",&t);while(t--){memset(vis,0,sizeof(vis));scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);}int k=0;for(int i=0;i<n;i++){for(int j=0;j<a[i]-a[i-1];j++){s[k++]='(';}s[k++]=')';}for(int i=0;i<k;i++){if(s[i]==')'){int cnt=0;for(int j=i-1;j>=0;j--){if(s[j]=='('){if(vis[j]){cnt++;}else{vis[j]=1;q.push (cnt+1);goto T;}}}T:;}}printf("%d",q.front ());q.pop();while(q.size ()){printf(" %d",q.front());q.pop ();}printf("\n");}
}