Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <list>
- #include <map>
- #include <set>
- #include <deque>
- #include <stack>
- #include <queue>
- #include <algorithm>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <memory.h>
- #include <ctime>
- using namespace std;
- #define ABS(a) ((a>0)?a:-(a))
- #define MIN(a,b) ((a<b)?(a):(b))
- #define MAX(a,b) ((a<b)?(b):(a))
- #define FOR(i,a,n) for (int i=(a);i<(n);++i)
- #define FI(i,n) for (int i=0; i<(n); ++i)
- #define pnt pair <int, int>
- #define mp make_pair
- #define PI 3.14159265358979
- #define MEMS(a,b) memset(a,b,sizeof(a))
- #define LL long long
- #define U unsigned
- int base=1000000000;
- vector<int> add(vector<int> a, vector<int> b)
- {
- int p=0;
- for (int i=0; i<MAX(a.size(),b.size()) || p; ++i)
- {
- if (i==a.size())
- a.push_back(0);
- int v=0;
- if (i<b.size())
- v=b[i];
- a[i]+=v+p;
- p=(a[i]>=base);
- if (a[i]>=base)
- a[i]-=base;
- }
- return a;
- }
- string s;
- vector<int> dp[310][310];
- int was[310][310];
- vector<int> one,zero;
- int nextt[310][2];
- vector<int> r(int p, int b)
- {
- if (was[p][b])
- return dp[p][b];
- if (p==s.size())
- {
- if ((b==0))
- return one;
- return zero;
- }
- was[p][b]=1;
- vector<int> res;
- if (b==0)
- res=one;
- else
- res=zero;
- if (nextt[p][0]!=s.size())
- res=add(res,r(nextt[p][0]+1,b+1));
- if ((b>0) && (nextt[p][1]!=s.size()))
- res=add(res,r(nextt[p][1]+1,b-1));
- return dp[p][b]=res;
- }
- int main()
- {
- #ifdef Fcdkbear
- freopen("in.txt","r",stdin);
- // freopen("out.txt","w",stdout);
- double beg=clock();
- #endif
- one.push_back(1);
- zero.push_back(0);
- cin>>s;
- int v1=s.size(),v2=s.size();
- for (int i=(int)s.size()-1; i>=0; --i)
- {
- if (s[i]=='(')
- v1=i;
- else
- v2=i;
- nextt[i][0]=v1;
- nextt[i][1]=v2;
- }
- vector<int> res=r(0,0);
- printf("%d",res.back());
- for (int i=(int)res.size()-2; i>=0; --i)
- printf("%09d",res[i]);
- printf("\n");
- #ifdef Fcdkbear
- double end=clock();
- fprintf(stderr,"*** Total time = %.3lf ***\n",(end-beg)/CLOCKS_PER_SEC);
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment