Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define sc(a) scanf("%d",&a)
- #define F(x) -1*(x==')')+(x=='(')
- string a,b;
- int dp[2501][2501],MD=1e9+7, n,m,prea[2502],preb[2502];
- struct InterleavingParenthesis
- {
- public:
- int solve(int s,int d)
- {
- int bal = prea[s]+preb[d];
- if(s==n&&d==m){
- return (bal==0);
- }
- int & ans = dp[s][d];
- if(ans!=-1)return ans;
- ans =0;
- if(bal>0&&s<n&&a[s]==')')
- ans+=solve(s+1,d);
- ans%=MD;
- if(bal>0&&d<m&&b[d]==')')
- ans+=solve(s,d+1);
- ans%=MD;
- if(a[s]=='('&&s<n)
- ans+=solve(s+1,d);
- ans%=MD;
- if(b[d]=='('&&d<m)
- ans+=solve(s,d+1);
- ans%=MD;
- return ans;
- }
- int countways(string s1,string s2)
- {
- memset(dp,-1,sizeof dp);
- a=s1,b=s2;
- n=a.size(),m=b.size();
- for(int i=0;i<n;i++)
- prea[i+1]=prea[i]+F(a[i]);
- for(int i=0;i<m;i++)
- preb[i+1]=preb[i]+F(b[i]);
- return solve(0,0);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement