您的位置:首页 > 其它

poj 1068 Parencodings(模拟)

2013-07-24 09:58 351 查看
题目链接:http://poj.org/problem?id=1068

题目大意:

例如有一个关于括号的符号串(由'('和')'组成)S;

现在给出数列p代表,符号串中每个右括号的左边有几个左括号;

要求求出数列w代表,每个右括号和其相匹配的左括号中包含有几组匹配括号(包含自身);

思路:

利用栈存储字符串S,在利用一个临时的栈来倒序分组求出每个匹配括号中包含的匹配括号数;

#include<iostream>
#include<stack>
using namespace std;

stack <char> temp;
stack <char> S;

int main()
{
int cas;
int ret[21];
scanf("%d",&cas);
while(cas--)
{
int n,i,num,t=0;
scanf("%d",&n);
int len=n;
for(i=0;i<n;i++)
{
scanf("%d",&num);
while(t<num)
{
S.push('(');
t++;
}
S.push(')');
}
n--;
while(!S.empty())
{
S.pop();
int right=1,left=0;
while(!S.empty())
{
if(S.top()==')')
right++;
else
left++;
temp.push(S.top());
S.pop();
if(right==left)
{
ret[n--]=left;
break;
}
}
temp.pop();
while(!temp.empty())
{
S.push(temp.top());
temp.pop();
}
}
for(i=0;i<len;i++)
{
if(i==len-1)
printf("%d\n",ret[i]);
else
printf("%d ",ret[i]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: