Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #include <vector>
- #include <stdlib.h>
- #include <stdio.h>
- #include <fstream>
- #include <stack>
- #include <map>
- #include <cstring>
- #include <cmath>
- #include <set>
- #include <iterator>
- #include <cmath>
- const long long M = 1000000007;
- void task()
- {
- bool flag = false;
- string s;
- long long int n, k = 0;
- int d = 0;
- getline(cin, s);
- n = s.size();
- vector<long long int> vec(int(n / 2) + 3, 0), vec2(int(n / 2) + 3, 0), z(int(n / 2) + 3, 0);
- vec[1] = 1;
- for(auto j = 1; j < n ; j++)
- {
- if (s[j - 1] == '(')
- {
- for(auto i = 1 + j % 2 ; i < n / 2 + 2; i += 2)
- vec2[i] = vec[i - 1] % M;
- }
- if (s[j - 1] == ')')
- {
- for(auto i = 1 + j % 2; i < n / 2 + 2; i += 2)
- vec2[i] = vec[i + 1] % M;
- }
- if (s[j - 1] == '?')
- {
- for(auto i = 1 + j % 2; i < n / 2 + 2; i += 2)
- {
- flag = true;
- vec2[i] = (vec[i - 1] + vec[i + 1]) % M;
- }
- }
- swap(vec, vec2);
- vec2= z;
- }
- if(flag == false)
- {
- cout << 1 << endl;
- d = 1;
- }
- if (d == 0)
- cout << vec[2] << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement