C. Replace To Make Regular Bracket Sequence

题目连接:

http://www.codeforces.com/contest/612/problem/C

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

[<}){}

Sample Output

2

Hint

题意

给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号

问你最少修改多少次,才能使得这个字符串匹配,输出次数

题解:

用stack,每次将左括号压进stack里面,遇到右括号就判断一下就好了

非法就很简单,看看栈最后是否还有,看看右括号的时候,左括号的栈是否为空

代码

#include<bits/stdc++.h>
using namespace std; string s;
stack<char> S;
int main()
{
cin>>s;
int ans = 0;
for(int i=0;i<s.size();i++)
{ if(s[i]==']')
{
if(S.size()==0)return puts("Impossible");
if(S.top()=='[')
S.pop();
else
{
ans++;
S.pop();
}
}
else if(s[i]==')')
{
if(S.size()==0)return puts("Impossible");
if(S.top()=='(')
S.pop();
else
{
ans++;
S.pop();
}
} else if(s[i]=='>')
{
if(S.size()==0)return puts("Impossible");
if(S.top()=='<')
S.pop();
else
{
ans++;
S.pop();
}
}
else if(s[i]=='}')
{
if(S.size()==0)return puts("Impossible");
if(S.top()=='{')
S.pop();
else
{
ans++;
S.pop();
}
}
else S.push(s[i]);
}
if(S.size()!=0)return puts("Impossible");
cout<<ans<<endl;
}

最新文章

  1. Unity加载模块深度解析(Shader)
  2. JSON返回DateTime/Date(&#39;123123123&#39;)/解决办法
  3. 从代码看 asp.net 处理过程
  4. 结合Scikit-learn介绍几种常用的特征选择方法
  5. (WPF, MVVM) Textbox Binding
  6. VM虚拟机快照还原效果实现方式
  7. TFS 2010 使用手册(三)权限管理
  8. 转:Android官方MVP架构示例项目解析
  9. $rootScope
  10. Prepare Python environment and install selenium.
  11. 安卓---项目中插入百度地图sdk
  12. High Performance Browser Networking - TCP UDP TLS
  13. elasticsearch 索引优化
  14. Error creating bean with name
  15. 【Mybatis】MyBatis之Sql配置文件的使用(四)
  16. hdu1285 确定比赛名次【拓扑排序】
  17. perl 里面如何写出阅读友好的代码提示
  18. ABP框架系列之四十:(Notification-System-通知系统)
  19. ERP合同列表页面自动导航(三十二)
  20. C语言 二维数组(指针)动态分配和释放(转)

热门文章

  1. 组合 z
  2. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。
  3. vector容器使用总结 .xml
  4. linux命令 screen的简单使用
  5. R语言简单入门
  6. Hadoop学习笔记(6) ——重新认识Hadoop
  7. javascript里面的闭包,作用域,预解析
  8. Django 1.6 最佳实践: django项目的服务器自动化部署(转)
  9. Objective-C 学习笔记(1)
  10. hdu-4753-Fishhead’s Little Game-记忆化搜索