Codefroces 223A - Bracket Sequence【栈优化】
来源:互联网 发布:淘宝信用卡套现 编辑:程序博客网 时间:2024/06/05 04:49
题目大意:
有一串只含有 "(" ")" "[" "]" 的序列,问在该序列的 左右括号能分别配对的 所有子串中的含有方括号的个数的最大值,并输出相对应的子串。
做法:
利用一个栈来维护,每次如果有能与栈顶的元素配对的右边括号时,将该元素弹出,如果此时弹出的元素代表方括号,那么记录此时出现的下标。否则将该元素压进栈。
当然我们压进栈的是当前元素的下标。当处理完整个序列之后,栈里面存的就是所有不能配对的括号所处的下标,每两个下标之间就是能配对的,符合条件的。这样,我们最后只需要比较每两个下标之间含有的能含有方括号最多即可。而计算某个片段有多少个方括号的话,我们只需要利用之前记录的方括号的下标,计算一个前缀和,就能很方便的算出来了
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define N 110010using namespace std;char a[N];int sta[N];int vis[N];int ans,l,r;int main(){ scanf("%s",a); int len=strlen(a); int tail=1; for(int i=0;i<len;i++) { if(tail==1) { sta[tail++]=i; vis[i]+=vis[i-1]; continue; } if(a[i]=='(') { sta[tail++]=i; } if(a[i]==')') { if(a[sta[tail-1]]=='(') tail--; else sta[tail++]=i; } if(a[i]=='[') { sta[tail++]=i; } if(a[i]==']') { if(a[sta[tail-1]]=='[') { tail--; vis[i]=1; } else sta[tail++]=i; } vis[i]+=vis[i-1]; } vis[len]+=vis[len-1]; if(tail==1) { cout<<vis[len]-vis[0]<<endl; cout<<a<<endl; return 0; } sta[tail++]=len; sta[0]=0; for(int i=1;i<tail;i++) { if(ans<vis[sta[i]]-vis[sta[i-1]]) { ans=vis[sta[i]]-vis[sta[i-1]]; if(i-1) l=sta[i-1]+1; else l=0; r=sta[i]; } } cout<<ans<<endl; for(int i=l;i<r;i++) cout<<a[i]; return 0;}
0 0
- Codefroces 223A - Bracket Sequence【栈优化】
- Codeforces 223A Bracket Sequence [栈]
- CF 223A Bracket Sequence
- codeforces-223A-Bracket Sequence
- CF - 223 - A. Bracket Sequence
- 【CodeForces】223A - Bracket Sequence(栈 & 模拟)
- codeforcres 5C Longest Regular Bracket Sequence 队列优化 栈
- Replace To Make Regular Bracket Sequence 【栈】
- UESTC 1546 Bracket Sequence
- UESTC 1546 Bracket Sequence
- UESTC 1546 Bracket Sequence
- CF Bracket Sequence
- UESTC 94 Bracket Sequence
- Longest Regular Bracket Sequence
- codefroces 543A Writing Code dp优化 完全背包
- 栈 Codeforces612C Replace To Make Regular Bracket Sequence
- codreforces C. Replace To Make Regular Bracket Sequence(栈)
- Codeforces 612C Replace To Make Regular Bracket Sequence【栈】
- Lua学习笔记 第十八章 数学库
- ActionForm详解
- 懂得SEO不是全部,网站最终出路在于思维方式
- oracle 分析函数over
- 利用svn钩子进行客户端更新并打印日志
- Codefroces 223A - Bracket Sequence【栈优化】
- ActionForward详解二
- Lua学习笔记 第十九章 table库
- ios 获取屏幕尺寸
- NYOJ-队花的烦恼一
- 编辑距离--java实现
- HBase笔记:学习要点
- Asmack之旅(一)初识asmack源码
- AxureRP7.0基础教程系列 部件详解 文本框 Text field