您的位置:首页 > 产品设计 > UI/UE

Codeforces 612C: Replace To Make Regular Bracket Sequence(栈)

2016-07-28 09:43 375 查看
Description

You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bracket {, but
you can't replace it by ) or >.

The following definition of a regular bracket sequence is well-known, so you can be familiar with it.

Let's define a regular bracket sequence (RBS). Empty string is RBS. Let s1 and s2 be a RBS then the strings <s1>s2, {s1}s2, [s1]s2, (s1)s2 are also RBS.

For example the string "[[(){}]<>]" is RBS, but the strings "[)()" and "][()()" are not.

Determine the least number of replaces to make the string s RBS.

Input

The only line contains a non empty string s, consisting of only opening and closing brackets of four kinds. The length of s does not exceed 106.

Output

If it's impossible to get RBS from s print Impossible.

Otherwise print the least number of replaces needed to get RBS from s.

Sample Input

Input

[<}){}

Output

2

Input

{()}[]

Output

0

Input

]]

Output
Impossible

题意:括号配对问题,这里你可以将相同方向的括号换成别的括号,最后如果能配对输出换了多少个,如果不能输出Impossible;

思路:栈,遇到左边的括号进栈并保存有多少个,遇到右边的判断与最后一个进栈的是否配对如果配对则ans-1。这里需要注意的是有可能左边多了或者右边多了这时可以判断栈是否为空 如果为空 则在输入右边的就Impossible 如果不为空 最后判断时 可以知道 有左边的没有配对成功 输出Impossible

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<string.h>
using namespace std;
char a[1000011];
int main()
{
while(~scanf("%s",a))
{
int t=strlen(a);
if(t%2!=0)
printf("Impossible\n");
else
{
stack<char >sta;
int ans=0,p=0;
for(int i=0;i<t;i++)
{
if(a[i]=='{'||a[i]=='['||a[i]=='('||a[i]=='<')
{
sta.push(a[i]);
ans++;
}
else
{
if(sta.empty())
{
p++;
printf("Impossible\n");
break;
}
else
{
char s=sta.top();
if((s=='{'&&a[i]=='}')||(s=='('&&a[i]==')')||(s=='['&&a[i]==']')||(s=='<'&&a[i]=='>'))
{
ans--;
}
sta.pop();
}
}
}
if(p==0)
{
if(sta.empty())
{
if(ans<0)
printf("Impossible\n");
else
printf("%d\n",ans);
}
else
printf("Impossible\n");
}
}
memset(a,0,sizeof(a));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: