CodeForces
来源:互联网 发布:软件外包接单 编辑:程序博客网 时间:2024/06/06 09:00
题意:给定一个由字符 ( 和 ) 组成的字符串。您需要找出它的最长子串,且该子串是一个合格的括号序列。同时,还需要找出这样的子串的数目。(像(),(())样的为合格的括号序列,((()())为不合格);
思路:设dp[i]表示到第i个右括号所获串的长度。则dp[i]=dp[t-1]+i-t+1。t表示离i最近的那个左括号的位置。
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define ls rt<<1#define rs rt<<1|1#define Mod 1000000007#define i64 __int64#define LIMIT_ULL 100000000000000000using namespace std;char s[1000005]; int dp[1000005]; stack<int> st; int main() { scanf("%s",s+1); int cnt=0,ans=0,i,l=strlen(s+1); for(i=1;i<=l;++i) { if(s[i]=='(') st.push(i); else { if(!st.empty()) { int t=st.top(); st.pop(); dp[i]=dp[t-1]+i-t+1; if(dp[i]>ans) { ans=dp[i]; cnt=1; } else if(dp[i]==ans) ++cnt; } } } if(!ans) cnt=1; printf("%d %d\n",ans,cnt); return 0; }
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 算法与数据结构
- 拉普拉斯矩阵/映射/聚类
- Linux系统启动过程
- python的yield使用
- 一:ubuntu14.04下配置OpenCV3.3.0和Python2.7
- CodeForces
- 转载:git概念 原理 使用
- 链表的基本操作
- 把数字字符串(带有小数点)转化为整型(浮点型)
- SpringMVC第七篇【RESTful支持、拦截器】
- 计算机视觉论文集
- 《算法笔记》第2章C/C++快速入门(读书笔记)
- POJ 3903-最长上升子序列
- HDU 1201-18岁生日(字符串)