AcWing 783. 括号序列
原题链接
中等
作者:
_empty
,
2019-05-14 20:18:10
,
所有人可见
,
阅读 1078
#include<iostream>
#include<cstring>
using namespace std;
const int mo=1e9+7;
const int N=2510;
int s1s[N],s2s[N];
char s1[N],s2[N];
int f[N][N];
int n,m;
void get_prefix_sum(int sum[], char str[], int k)
{
for(int i=1;i<=k;i++)
if(str[i]=='(')
sum[i]=sum[i-1]+1;
else
sum[i]=sum[i-1]-1;
}
int main()
{
cin>>s1+1>>s2+1;
n=strlen(s1+1);
m=strlen(s2+1);
get_prefix_sum(s1s,s1,n);
get_prefix_sum(s2s,s2,m);
if(s1s[n]+s2s[m]!=0) puts("0");
else
{
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
if(!i && !j) f[i][j]=1;
else
{
if(s1s[i]+s2s[j]>=0)
{
if(i) f[i][j]+=f[i-1][j];
if(j) f[i][j]+=f[i][j-1];
f[i][j]%=mo;
}
}
cout<<f[n][m]<<endl;
}
return 0;
}