Submission #1324011

#TimeUsernameProblemLanguageResultExecution timeMemory
1324011kasamchiMiners (IOI07_miners)C++20
100 / 100
79 ms66656 KiB
#include <bits/stdc++.h>
using namespace std;

#define INF 1000000000
int dp[100001][13][13] = {};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int N;
    cin >> N;

    string S;
    cin >> S;

    string ford[13] = {"", "M", "F", "B", "MM", "MF", "MB", "FM", "FF", "FB", "BM", "BF", "BB"};

    for (int i = 0; i <= N; i++) {
        for (int j = 0; j < 13; j++) {
            for (int k = 0; k < 13; k++) {
                if (i + j + k > 0) {
                    dp[i][j][k] = -INF;
                }
            }
        }
    }
    for (int i = 1; i <= N; i++) {
        for (int t = 0; t < 13; t++) {
            int l, r;
            if (t == 0) {
                l = 1, r = 3;
            } else if (t == 1 || t == 4 || t == 7 || t == 10) {
                l = 4, r = 6;
            } else if (t == 2 || t == 5 || t == 8 || t == 11) {
                l = 7, r = 9;
            } else {
                l = 10, r = 12;
            }
            for (int j = l; j <= r; j++) {
                if (ford[j].back() == S[i - 1]) {
                    string ss = ford[t] + S[i - 1];
                    sort(ss.begin(), ss.end());
                    int scr = unique(ss.begin(), ss.end()) - ss.begin();
                    for (int k = 0; k < 13; k++) {
                        dp[i][j][k] = max(dp[i][j][k], dp[i - 1][t][k] + scr);
                        dp[i][k][j] = max(dp[i][k][j], dp[i - 1][k][t] + scr);
                    }
                }
            }
        }
    }

    int ans = 0;
    for (int j = 0; j < 13; j++) {
        for (int k = 0; k < 13; k++) {
            ans = max(ans, dp[N][j][k]);
        }
    }
    cout << ans << '\n';
}
#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...