Submission #167403

#TimeUsernameProblemLanguageResultExecution timeMemory
167403NightlightMiners (IOI07_miners)C++14
100 / 100
133 ms1016 KiB
#include <bits/stdc++.h> using namespace std; int N; int A[100005]; int DP[2][4][4][4][4]; // DP(n, 2nd last mine 1, last mine 1, 2nd last mine 2, last mine 2) int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> N; string S; cin >> S; for (int i = 0; i < N; i++) { if (S[i] == 'M') { A[i] = 1; } else if (S[i] == 'B') { A[i] = 2; } else { A[i] = 3; } } for (int n = N - 1; n >= 0; n--) { for (int s1 = 0; s1 < 4; s1++) { for (int l1 = 0; l1 < 4; l1++) { for (int s2 = 0; s2 < 4; s2++) { for (int l2 = 0; l2 < 4; l2++) { int& res = DP[n % 2][s1][l1][s2][l2]; res = 0; int ss1 = s1, ll1 = l1, ss2 = s2, ll2 = l2; if (s1 == 0) { ss1 = A[n]; } if (s2 == 0) { ss2 = A[n]; } if (l1 == 0) { ll1 = A[n]; } if (l2 == 0) { ll2 = A[n]; } if (ss1 == A[n] && ll1 == A[n]) { res = max(res, 1 + DP[(n + 1) % 2][l1][A[n]][s2][l2]); } else if (ss1 == A[n] || ll1 == A[n] || ss1 == ll1) { res = max(res, 2 + DP[(n + 1) % 2][l1][A[n]][s2][l2]); } else { res = max(res, 3 + DP[(n + 1) % 2][l1][A[n]][s2][l2]); } if (ss2 == A[n] && ll2 == A[n]) { res = max(res, 1 + DP[(n + 1) % 2][s1][l1][l2][A[n]]); } else if (ss2 == A[n] || ll2 == A[n] || ss2 == ll2) { res = max(res, 2 + DP[(n + 1) % 2][s1][l1][l2][A[n]]); } else { res = max(res, 3 + DP[(n + 1) % 2][s1][l1][l2][A[n]]); } } } } } } cout << DP[0][0][0][0][0] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...