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