Submission #198089

#TimeUsernameProblemLanguageResultExecution timeMemory
198089model_codeFishing Game (RMI19_fishing)C++17
20 / 100
105 ms55800 KiB
/** * user: gospodinov-b8b * fname: Antani * lname: Gospodinov * task: fishing * score: 20.0 * date: 2019-10-11 08:22:01.095417 */ #include <bits/stdc++.h> #define ll long long #define mp make_pair #define pb push_back using namespace std; const int N = 35; const int MOD = 1e9 + 7; int add(int x, int y) { return (x + MOD + y) % MOD; } int mul(int x, int y) { return (1LL * add(0, x) * add(0, y)) % MOD; } int n; int dp[3 * N][3 * N][3 * N][3][2]; int solve(int shared_AB, int shared_BC, int shared_CA, int turn, bool discarded) { int A = shared_AB + shared_CA, B = shared_AB + shared_BC, C = shared_BC + shared_CA; //cout << A << " " << B << " " << C << " " << turn << " " << discarded << endl; if(dp[shared_AB][shared_BC][shared_CA][turn][discarded] != -1) return dp[shared_AB][shared_BC][shared_CA][turn][discarded]; if(shared_AB + shared_BC + shared_CA == 0) return 1; int state = 0; if(turn == 0 && shared_CA) state = add(state, mul(shared_CA, solve(shared_AB, shared_BC + 1, shared_CA - 1, 1, discarded))); if(turn == 1 && shared_AB) state = add(state, mul(shared_AB, solve(shared_AB - 1, shared_BC, shared_CA + 1, 2, discarded))); if(turn == 2 && shared_BC && discarded) state = add(state, mul(shared_BC, solve(shared_AB + 1, shared_BC - 1, shared_CA, 0, false))); if(turn == 0 && shared_AB) state = add(state, mul(shared_AB, solve(shared_AB - 1, shared_BC, shared_CA, 1, true))); if(turn == 1 && shared_BC) state = add(state, mul(shared_BC, solve(shared_AB, shared_BC - 1, shared_CA, 2, true))); if(turn == 2 && shared_CA) state = add(state, mul(shared_CA, solve(shared_AB, shared_BC, shared_CA - 1, 0, false))); if(turn == 0 && A == 0) state = add(state, solve(shared_AB, shared_BC, shared_CA, 1, discarded)); if(turn == 1 && B == 0) state = add(state, solve(shared_AB, shared_BC, shared_CA, 2, discarded)); if(turn == 2 && C == 0 && discarded) state = add(state, solve(shared_AB, shared_BC, shared_CA, 0, false)); return dp[shared_AB][shared_BC][shared_CA][turn][discarded] = state; } int cnt[3][305]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); memset(dp, -1, sizeof(dp)); int tests; cin >> n >> tests; while(tests--) { memset(cnt, 0, sizeof(cnt)); for(int i = 0; i < 3; i++) for(int j = 1; j <= 2 * n; j++) { int x; cin >> x; cnt[i][x] = (cnt[i][x] + 1) % 2; } int shared_ab = 0, shared_bc = 0, shared_ca = 0; for(int j = 1; j <= 3 * n; j++) { if(cnt[0][j] && cnt[1][j]) shared_ab++; if(cnt[1][j] && cnt[2][j]) shared_bc++; if(cnt[2][j] && cnt[0][j]) shared_ca++; } cout << solve(shared_ab, shared_bc, shared_ca, 0, 0) << endl; } return 0; } /* 1 1 1 3 1 2 2 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...