博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题解 P1944 最长括号匹配_NOI导刊2009提高(1)
阅读量:4628 次
发布时间:2019-06-09

本文共 1293 字,大约阅读时间需要 4 分钟。


栈,模拟

  • 把每个元素逐个入栈
  • 如果和栈顶元素匹配,那么一块弹出去,同时标记这里是可匹配的。
  • 取出连续的,最长的可匹配的序列即可。
#include 
#include
#include
#define re register#define Clean(X,K) memset(X,K,sizeof(X))using namespace std ;const int Maxl = 1000005 ;string S ;char A[Maxl] ;int Ans = 0 , Now = 0 , Top = 1 , M[Maxl] , Lc[Maxl] , From;int main () {// freopen ("P1944.in" , "r" , stdin) ; getline (cin , S) ; int L = S.length() ; Clean(M , 0) , Clean(A , 0); for (re int i = 0 ; i < L ; ++ i) { if (S[i] == ')' && A[Top] == '(' ) { -- Top , M[i] = M[Lc[Top + 1]] = 1 ; continue ; } if (S[i] == ']' && A[Top] == '[' ) { -- Top , M[i] = M[Lc[Top + 1]] = 1 ; continue ; } A[++ Top] = S[i] ; Lc[Top] = i ; } for (re int i = 0 ; i < L; ++ i) { if (M[i]) ++ Now ; else { if (Now > Ans) { Ans = Now ; From = i - 1 ; } Now = 0 ; } } int St=0; for (re int i = From ; i >= 0 ; -- i ) if (!M[i]) { St = i + 1; break ; }; for (re int i = St ; i <= From ; ++ i) putchar(S[i]) ; fclose (stdin) , fclose (stdout) ; return 0 ;}

转载于:https://www.cnblogs.com/bj2002/p/10705974.html

你可能感兴趣的文章
How to Create Modifiers Using the API QP_MODIFIERS_PUB.PROCESS_MODIFIERS
查看>>
待飞笔记(第一天 )
查看>>
解惑好文:移动端H5页面高清多屏适配方案
查看>>
traefik添加多证书
查看>>
忽略UserInterfaceState.xcuserstate
查看>>
ReactNative--Flexbox布局
查看>>
java实现读取文件大全
查看>>
[Cordova] 无法显示Alert视窗
查看>>
借助过度区选择阈值
查看>>
评论列表显示及排序,个人中心显示
查看>>
JavaScript 实现鼠标拖动元素
查看>>
js 模糊查询 (360接口)
查看>>
python+rabbitMQ实现生产者和消费者模式
查看>>
“模态”对话框和“后退”按钮
查看>>
关于javascript实现的网站页面侧边悬浮框"抖动"问题
查看>>
linux_命令格式和命令提示符
查看>>
Cocos2d-X-3.0之后的版本的环境搭建
查看>>
when case group by 的用法集合
查看>>
洛谷P1908 逆序对
查看>>
转义符
查看>>