CodeForces-612C C
来源:互联网 发布:手机内存磁盘软件 编辑:程序博客网 时间:2024/04/29 07:10
CodeForces-612C [C - Replace To Make Regular Bracket Sequence](栈 括号配对)
- 题目链接
- 题目大意:输入一个字符串s只包括四种括号,括号方向相同的如’[‘,’{‘,’(‘,’<’可以互换,同理’]’,’}’,’)’,’>’可以互换,如果方向不同不能互换,判断给出的字符串s能否变成RBS串(就是经过变换都能两两配对成功),如果能则输出需要改变的最少次数
- 解题思路:刚开始我是用数组做的,直接扫一遍把相邻的一对括号判断出来,把其他字符存到另一个数组,然后再在这数组里看看两两相邻的是不是一对,但是这种解法是不对的,比如字符串[[[]]],第一次后变成[[]],头两个相邻位置的字符,不是一对但是这种也是可以的,我错误的地方是没有想到经过一次筛除相邻位置成对的括号后得到的字符串,还是有可能大括号套小括号的,然后我就看了网上的题解,用了栈(先进后出),从头到尾扫一遍遇到’[‘,’{‘,’(‘,’<’全部放到栈里,遇到’]’,’}’,’)’,’>’就跟已经在栈里的对比
- AC代码
#include<stdio.h>#include<string.h>#include<algorithm>#include<stack>using namespace std;const int maxn=1000100;char a[maxn];int main(){ int i,len,ans=0,flag=0; stack<char> st; scanf("%s",a); len=strlen(a); for(i=0;i<len;i++) { if(a[i]=='('||a[i]=='['||a[i]=='<'||a[i]=='{') st.push(a[i]); else if(a[i]==')'||a[i]=='}'||a[i]=='>'||a[i]==']') { if(st.empty()) { flag=1; break; } else { char t=st.top(); st.pop(); if((t=='('&&a[i]!=')')||(t=='['&&a[i]!=']')||(t=='{'&&a[i]!='}')||(t=='<'&&a[i]!='>')) ans++; } } } if(flag==1||!st.empty()) printf("Impossible"); else printf("%d",ans); return 0;}
阅读全文
0 0
- CodeForces-612C C
- 【Codeforces 612c】
- Codeforces 612C
- CodeForces 612C
- Codeforces-340-C(c++)
- Codeforces-507-C(c++)
- CodeForces 731C C
- CODEFORCES 265C CODEFORCES, 265C
- C. Swaps CodeForces 134C
- 【codeforces 723C C. Sanatorium】
- codeforces #78 div2 C
- Codeforces 117C Cycle
- CodeForces 209C
- CodeForces 156C Cipher
- codeforces 148 div2 C
- codeforces 242C
- Codeforces-234C Weather
- codeforces 106C Buns
- 接口和抽象类的区别
- 拉格朗日插值法
- LintCode 最长回文子串(Manacher算法)
- 算法笔记 //07_整数因子分解问题
- 关于电脑快捷键
- CodeForces-612C C
- 父组件与子组件的通信
- [新手编程训练项目]005——C语言文件夹文件信息输出002:递归输出指定文件夹中的文件信息
- angular路由基本概念
- 鲁棒性小结
- CLion使用技巧
- 练习题
- 九度OJ题目1123:采药
- 学习笔记