【CodeForces】223A - Bracket Sequence(栈 & 模拟)
来源:互联网 发布:windows自带远程协助 编辑:程序博客网 时间:2024/06/05 22:58
点击打开题目
这道题做起来好烦啊,说一下思路吧:
像平时括号配对问题一样,能配对的弹出,否则就压入栈(下标),最后得到的栈两两数中间是能配对的(不包括开头结尾),然后依次取数算次数就行了。
代码如下:
#include <cstdio>#include <map>#include <stack>#include <cstring>#include <algorithm>using namespace std;int main(){map<char,int> m;m['('] = 1;m[')'] = -1;m['['] = 2;m[']'] = -2;char str[100000+22];int l;int ans;while (~scanf ("%s",str)){l = strlen(str);stack<int> s;ans = 0;for (int i = 0 ; i < l ; i++){if (m[str[i]] == 1 || m[str[i]] == 2)s.push(i);else if (s.empty())s.push(i);else if (m[str[i]] + m[str[s.top()]] == 0)//可以配对,弹出s.pop();else//不能配对,压入 s.push(i);}if (s.empty())//全部完成匹配 {for (int i = 0 ; i < l ; i++)if (m[str[i]] == 2)ans++;printf ("%d\n%s\n",ans,str);}else{int st,endd;int ans_st,ans_endd;//满足条件的开始于结束位置int ant;s.push(l);while (s.size() != 1){endd = s.top() - 1;s.pop();st = s.top() + 1;ant = 0;for (int i = st ; i <= endd ; i++)if (m[str[i]] == 2)ant++;if (ant > ans){ans = ant;ans_st = st;ans_endd = endd;}}st = 0;endd = s.top() - 1;ant = 0;for (int i = st ; i <= endd ; i++)if (m[str[i]] == 2)ant++;if (ant > ans){ans = ant;ans_st = st;ans_endd = endd;}if (ans){printf ("%d\n",ans);for (int i = ans_st ; i <= ans_endd ; i++)printf ("%c",str[i]);printf ("\n");}elseprintf ("0\n\n");}}return 0;}
0 0
- 【CodeForces】223A - Bracket Sequence(栈 & 模拟)
- Codeforces 223A Bracket Sequence [栈]
- codeforces-223A-Bracket Sequence
- Codefroces 223A - Bracket Sequence【栈优化】
- CF 223A Bracket Sequence
- CF - 223 - A. Bracket Sequence
- CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)
- Codeforces Round #350 (Div. 2) E:Correct Bracket Sequence Editor (简单链表模拟)
- Codeforces 670E Correct Bracket Sequence Editor (list模拟)
- Codeforces 350 Div2 E Correct Bracket Sequence Editor(list模拟)
- Codeforces 670E Correct Bracket Sequence Editor【模拟双相链表】
- CodeForces 612 C. Replace To Make Regular Bracket Sequence(栈)
- 【CodeForces】612C - Replace To Make Regular Bracket Sequence(栈,括号配对问题)
- 【Codeforces】-612C-Replace To Make Regular Bracket Sequence(括号配对,栈)
- CodeForces 612C Replace To Make Regular Bracket Sequence (栈)
- 【Codeforces】-612C-Replace To Make Regular Bracket Sequence(括号配对,栈)
- Codeforces 612C: Replace To Make Regular Bracket Sequence(栈)
- Codeforces 612C: Replace To Make Regular Bracket Sequence(栈)
- 软件测试实习0704-Ant的关键元素project、target、property和task。
- 验证数字的正则表达式
- sql注入攻击详解(二)sql注入过程详解
- 白化/漂白/whitening
- 密码截获
- 【CodeForces】223A - Bracket Sequence(栈 & 模拟)
- int和Integer的区别
- Spring 基础知识及练习
- 国军标--Gjb软件需求规格说明书模板
- Android5.0+(CollapsingToolbarLayout)
- Java异常处理的最佳实践
- 论apache重复造的轮子
- 生信 批量替换文件夹 内 某一字符
- 016.View的测绘基础MeasureSpec