题意

https://vjudge.net/problem/CodeForces-5C

给出一个括号序列,求出最长合法子串和它的数量。 合法的定义:这个序列中左右括号匹配。

思路

这个题和普通的括号匹配有区别,并行的括号匹配也可以存在,比如()()(),这种答案就是长度为6。

用一个数组记录每个位置是否匹配,用栈模拟,每遇到一个'('直接将下标入栈,遇到')'就看栈里面有没有'(',如果有就将这个位置和他匹配的位置(栈顶)置为10然后pop,没有就继续。

然后这个数组就是一片01了,找最长连续1即可,因为1表示这个位置可以匹配。

代码

#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N = 1e6 + 5;
const int mod = 1e9 + 7;
const double eps = 1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x & (-x))
int a[N];
int main()
{
std::ios::sync_with_stdio(false);
string s;
cin >> s;
stack<int> st;
int l = s.length();
for (int i = 0; i < l; i++)
{
if (s[i] == '(')
st.push(i);
else
{
if (st.size())
a[st.top()] = a[i] = 1, st.pop();
}
}
int mx = 0, cnt = 0;
map<int, int> mp;
for (int i = 0; i < l; i++)
{
if (a[i])
{
cnt++;
}
else
{
if (cnt >= mx)
{
mx = cnt;
mp[mx]++;
}
cnt = 0;
}
}
if (cnt >= mx)
mx = cnt, mp[mx]++;
if (mx == 0)
mp[mx] = 1;
cout << mx << " " << mp[mx] << endl;
return 0;
}

  

最新文章

  1. 使用css3新属性clip-path制作小图标
  2. 正则匹配中 ^ $ 和 \b 的区别
  3. [小菜随笔]新手使用appium+python进行自动化测试过程中webdriver.Remote报错的错误分析方法(带实例)
  4. Android Studio添加PNG图片报错原因
  5. expect的爱恨情仇
  6. 推荐一篇 OAuth 2.0 必读文章
  7. 将matlab中数据输出保存为txt或dat格式
  8. CSS属性(常用的属性)
  9. SxsTrace工具用法
  10. uva:10700 - Camel trading(贪婪)
  11. [LeetCode] Rectangle Overlap 矩形重叠
  12. linux远程ssh一键设置服务器时间
  13. sql查询(转)
  14. wpf-xaml-命名空间
  15. Kotlin入门(8)空值的判断与处理
  16. HISAT,sTRINGTIE,ballgown三款RNA-seq信息分析软件
  17. PDF文件分割和合并
  18. Git 使用篇二:搭建远程服务器
  19. 使用补丁修改DSDT/SSDT [DSDT/SSDT综合教程]
  20. 140730暑期培训.txt

热门文章

  1. java 抽象类和接口整理
  2. C语言博客作业10
  3. 十一次作业——LL(1)文法的判断,递归下降分析程序
  4. Reactive(1) 从响应式编程到"好莱坞"
  5. Java修炼——多维数组
  6. [TimLinux] JavaScript 模态框可拖动功能实现——jQuery版
  7. [TimLinux] Python如何运行程序
  8. nbuoj 2080 洛谷p1025 数的划分
  9. HDU3666-THE MATRIX PROBLEM(差分约束-不等式解得存在性判断 对数转化)
  10. MDS 多活配置