Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <string>
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <list>
- #include <algorithm>
- #include <sstream>
- #include <set>
- #include <cmath>
- #include <map>
- #include <unordered_map>
- #include <unordered_set>
- #include <stack>
- #include <queue>
- #include <cstdio>
- //#include <cstdlib>
- #include <cstring>
- #include <numeric>
- #include <bitset>
- #include <deque>
- #include <memory>
- const long long LINF = (5e17);
- const int INF = 1000000000;
- #define EPS 1e-7
- const int MOD = 1000000007;
- using namespace std;
- class TaroFillingAStringDiv1 {
- public:
- int getNumber(int N, vector <int> position, string value) {
- if (N==0)
- return 1;
- typedef pair<int, char> P;
- vector<P> m;
- for (int i=0; i<position.size(); ++i)
- m.push_back(P(position[i], value[i]));
- sort(m.begin(), m.end());
- long long ans = 1;
- for (int i=1; i<m.size(); ++i) {
- int d = m[i].first - m[i-1].first - 1;
- if ( (d&1) == (m[i].second != m[i-1].second) )
- ans = (ans * (d+1) )%MOD;
- }
- return (int)ans;
- }
- // BEGIN CUT HERE
- public:
- void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); }
- private:
- template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
- void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
- void test_case_0() { int Arg0 = 3; int Arr1[] = {1, 3}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); string Arg2 = "AB"; int Arg3 = 2; verify_case(0, Arg3, getNumber(Arg0, Arg1, Arg2)); }
- void test_case_1() { int Arg0 = 4; int Arr1[] = {2, 1, 3, 4}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); string Arg2 = "ABBA"; int Arg3 = 1; verify_case(1, Arg3, getNumber(Arg0, Arg1, Arg2)); }
- void test_case_2() { int Arg0 = 25; int Arr1[] = {23, 4, 8, 1, 24, 9, 16, 17, 6, 2, 25, 15, 14, 7, 13}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); string Arg2 = "ABBBBABABBAAABA"; int Arg3 = 1; verify_case(2, Arg3, getNumber(Arg0, Arg1, Arg2)); }
- void test_case_3() { int Arg0 = 305; int Arr1[] = {183, 115, 250, 1, 188, 193, 163, 221, 144, 191, 92, 192, 58, 215, 157, 187, 227, 177, 206, 15, 272, 232, 49, 11, 178, 59, 189, 246}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); string Arg2 = "ABAABBABBAABABBBBAAAABBABBBA"; int Arg3 = 43068480; verify_case(3, Arg3, getNumber(Arg0, Arg1, Arg2)); }
- // END CUT HERE
- };
- // BEGIN CUT HERE
- int main() {
- TaroFillingAStringDiv1 ___test;
- ___test.run_test(-1);
- }
- // END CUT HERE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement