CodeForces 5C Longest Regular Bracket Sequence
来源:互联网 发布:华为手机今年消费数据 编辑:程序博客网 时间:2024/05/17 09:32
题目大意:
给定一个括号字符串,求出这个括号字符串中最长合法的字符串长度=及个数;
思路分析:
①:当前字符是‘(’,入栈;
②:当前字符是 ' ) ',如果栈是空的或者栈顶元素是’)‘,入栈;否则,栈顶元素出栈,并让新的栈顶元素的num加上出栈元素的num(num代表合法子串的长度)并再加上2(合法子串长度加2),要注意特别判断栈为空的情况,我是用了一个ans变量来代表空了的栈的栈顶元素,再比较最长的合法子串的长度及个数。
代码实现:
#include<cstdio>#include<cstring>#include<iostream>#include<stack>#define Max(a,b) ((a)>(b)?(a):(b))using namespace std;const int N=1000010;char st[N];struct Node{ int num,flag; Node(int _num=0,int _flag=0):num(_num),flag(_flag){}};stack<Node> s;int main(){ while(~scanf("%s",st)){ while(!s.empty()) s.pop(); int l=strlen(st); int ans=0,tmp,max_l=0,num=0; for(int i=0;i<l;++i){ if(st[i]=='(') s.push(Node(0,0)); else if(st[i]==')'){ if(s.empty()||s.top().flag==1){ s.push(Node(0,1)); continue; } if(!s.empty()){ tmp=s.top().num; s.pop(); if(!s.empty()){ s.top().num+=tmp+2; if(max_l==s.top().num) num++; else if(max_l<s.top().num) max_l=s.top().num,num=1; } else{ ans+=tmp+2; if(max_l==ans) num++; else if(max_l<ans) max_l=ans,num=1; } } } } if(max_l==0) printf("0 1\n"); else printf("%d %d\n",max_l,num); }}
0 0
- Codeforces 5C. Longest Regular Bracket Sequence
- codeforces 5C Longest Regular Bracket Sequence
- CodeForces 5C. Longest Regular Bracket Sequence
- CodeForces 5C - Longest Regular Bracket Sequence
- CodeForces 5C Longest Regular Bracket Sequence
- codeforces 5C C. Longest Regular Bracket Sequence(dp)
- Codeforces 5C Longest Regular Bracket Sequence dp+stack
- codeforces 5C Longest Regular Bracket Sequence -- 贪心
- Review of Codeforces 5C. Longest Regular Bracket Sequence
- Codeforces Beta Round #5 C. Longest Regular Bracket Sequence
- Codeforces 5C Longest Regular Bracket Sequence [贪心] [DP]
- 【CodeForces 5C】【贪心】【dp】Longest Regular Bracket Sequence
- Codeforces 5C Longest Regular Bracket Sequence 题解
- CF 5C Longest Regular Bracket Sequence
- CF 5 C. Longest Regular Bracket Sequence
- codeforce 5C Longest Regular Bracket Sequence
- 5C-codeforce Longest Regular Bracket Sequence
- C - Longest Regular Bracket Sequence
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
- 杭电acm 2504又见GCD
- linux epoll事件模型详解(转载)
- LeetCode之Binary Tree Inorder Traversal
- 【UVA10405】【裸LCS】
- CodeForces 5C Longest Regular Bracket Sequence
- android 读取本地大图片时防止oom方法
- python中的字典详细介绍
- Java字符串相关--String和StringBuffer
- IntelliSense: 后面有“::”的名称一定是类名或命名空间名
- 设置secureCRT中vim的字体颜色
- Multiplying by Rotation
- leetcode 74: Search a 2D Matrix
- python eval函数 动态执行python语句