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

CodeForces 612C Replace To Make Regular Bracket Sequence (栈)

2016-07-25 18:16 435 查看
C - III
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d
& %I64u
Submit Status

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

#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
using namespace std;
char str[1100000];
int main()
{

int i,j,l,m,n,k;

while(scanf("%s",str)!=EOF)
{
stack<char>s;
int ans=0;
int flag=0;
int len=strlen(str);
k=l=0;
for(i=0;i<len;i++)
{
if(str[i]=='('||str[i]=='<'||str[i]=='{'||str[i]=='[')
{
s.push(str[i]);
k++;
}
else  if(str[i]==')')
{
l++;
if(s.empty())
{
flag=1;
break;
}
else
{
if(s.top()=='(')
s.pop();
else
{
ans++;
s.pop();
}
}
}
else if(str[i]=='>')
{
l++;
if(s.empty())
{
flag=1;
break;
}
else
{
if(s.top()=='<')
s.pop();
else
{
ans++;
s.pop();
}
}
}
else if(str[i]=='}')
{
l++;
if(s.empty())
{
flag=1;
break;
}
else
{
if(s.top()=='{')
s.pop();
else
{
ans++;
s.pop();
}
}
}
else if(str[i]==']')
{
l++;
if(s.empty())
{
flag=1;
break;
}
else
{
if(s.top()=='[')
s.pop();
else
{
ans++;
s.pop();
}
}
}
else
flag=1;
}
if(l!=k)
{
printf("Impossible\n");
}
else
{
if(flag==1)
printf("Impossible\n");
else
printf("%d\n",ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: