CodeForces 5C - Longest Regular Bracket Sequence
2015-07-29 00:07
507 查看
This is yet another problem dealing with regular bracket sequences.
We should remind you that a bracket sequence is called regular, if byinserting
«+» and
«1» into it we can get a correct mathematical expression. For example,sequences
«(())()»,
«()» and
«(()(()))» are regular, while
«)(»,
«(()» and
«(()))(» are not.
You are given a string of «(» and
«)»characters. You are to find its longest substring that is a regular bracketsequence. You are to find the number of
such substrings as well.
Input
The first line of the input file contains a non-empty string, consistingof
«(» and
«)» characters. Its length does not exceed 106.
Output
Print the length of the longest substring that is a regular bracketsequence, and the number of such substrings. If there are no such substrings,write the only line containing "0 1".
Sample test(s)
input
)((())))(()())
output
6 2
input
))(
output
0 1
思路:
开一个flag数组,对应字符串每一位是否正确,全部先标记为false
然后用栈判断、匹配括号,正确的括号直接对应位置变为true
最后就是算出true的最长序列
We should remind you that a bracket sequence is called regular, if byinserting
«+» and
«1» into it we can get a correct mathematical expression. For example,sequences
«(())()»,
«()» and
«(()(()))» are regular, while
«)(»,
«(()» and
«(()))(» are not.
You are given a string of «(» and
«)»characters. You are to find its longest substring that is a regular bracketsequence. You are to find the number of
such substrings as well.
Input
The first line of the input file contains a non-empty string, consistingof
«(» and
«)» characters. Its length does not exceed 106.
Output
Print the length of the longest substring that is a regular bracketsequence, and the number of such substrings. If there are no such substrings,write the only line containing "0 1".
Sample test(s)
input
)((())))(()())
output
6 2
input
))(
output
0 1
思路:
开一个flag数组,对应字符串每一位是否正确,全部先标记为false
然后用栈判断、匹配括号,正确的括号直接对应位置变为true
最后就是算出true的最长序列
程序: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <stack> using namespace std; #define L(u) (u<<1) #define R(u) (u<<1|1) #define lowbit(x) (x&-x) #define rep(i,x,y) for (i=x;i<=y;i++) #define ll __int64 #define max(x,y) ((x>y)?(x),(y)) #define min(x,y) ((x<y)?(x),(y)) #define sd(x) scanf("%d",&x) #define sd2(x,y) scanf("%d%d",&x,&y) #define slld(x) scanf("%lld",&x) const int N = 1000005; struct node { char c; int id; }a ; char st ; bool flag ; int main() { int i, j; scanf("%s", st); memset(flag, false, sizeof(flag)); int len = strlen(st) - 1; rep(j, 0, len) { if (st[j] == '(') break; } rep(i, 0, len) { a[i].c = st[i]; a[i].id = i; } stack<node> q; node temp; rep(i, j, len) { if (a[i].c == '(') { q.push(a[i]); } else if (a[i].c == ')') { if (q.empty()) { q.push(a[i]); } else { temp = q.top(); if (temp.c == '(') { flag[i] = true; flag[temp.id] = true; q.pop(); } else { q.push(a[i]); } } } } int count = 0; int mc = 0, mn = 1; rep(i, 0, len) { if (flag[i] == false) { count = 0; } else { count++; if (count>mc) { mc = count; mn = 1; } else if (count == mc) { mn++; } } } printf("%d %d\n", mc, mn); return 0; }
相关文章推荐
- AutoLayout五、使用Masonry完成UITableViewCell的自适应高度
- hd1509 Windows Message Queue
- (BC 一周年) hdu 5312 Sequence
- Java--break continue
- UITextField 和 UIButton的基本属性和用法
- iOS开发——UI进阶篇(九)block的巧用
- UVA133-The Dole Queue
- Android API Guides 阅读笔记(6)----Task and Back Stack
- poj 1019 Number Sequence
- iOS scrollView及其子类(UITableView等等)内容偏下
- 第70讲:Scala界面GUI编程入门
- IOS UITableView使用自适应表格单元(estimatedCellHeight)在调用scroll时的bug
- UE.getEditor is not a function
- UE.getEditor is not a function
- Android高级UI之自定义“更多”界面
- 解决 sublime 不能执行(build)代码 : UnicodeDecodeError: 'ascii' codec can't decode
- Codeforces Gym 100570 E. Palindrome Query Manacher
- velley学习笔记(三):定制自己的Request
- iOS UIImage加载图片的问题
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用