题目:Longest Regular Bracket Sequence
思路:简单dp
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
using namespace std;
#define maxn 1000010
int dp[maxn];
stack<int>st;
int main()
{
while(!st.empty())
st.pop();
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')
st.push(i);
else
{
if(!st.empty())
{
int tmp=st.top();
st.pop();
if(tmp)
dp[i]=dp[tmp-1]+i-tmp+1;
else
dp[i]=dp[0]+i-tmp+1;
}
}
}
int ans=0,cnt=1;
for(int i=0;i<s.size();i++)
{
if(dp[i]>ans)
{
cnt=1;
ans=dp[i];
}
else if(dp[i]==ans)
cnt++;
}
if(ans==0)
cout<<"0 1"<<endl;
else
cout<<ans<<" "<<cnt<<endl;
return 0;
}