Submission #1232481

#TimeUsernameProblemLanguageResultExecution timeMemory
1232481countlessMiners (IOI07_miners)C++20
100 / 100
476 ms201048 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

#define sp <<" "<<
#define endl "\n"
#define rep(i, a, b) for (ll i = a; i < b; i++)

const ll INF = 1e18;
const int MAXN = 1e5+5;

ll dp[MAXN][4][4][4][4];

inline ll calc(int a, int b, int c) {
    set<int> amt;
    if (a) amt.insert(a);
    if (b) amt.insert(b);
    if (c) amt.insert(c);
    return amt.size();
}

void solve() {
    int n; cin >> n;
    string s; cin >> s;

    map<char, int> rev;
    rev['M'] = 1, rev['F'] = 2, rev['B'] = 3;

    fill_n(&dp[0][0][0][0][0], MAXN*4*4*4*4, -INF);
    dp[0][0][0][0][0] = 0;

    rep(i,0,n) {
        int tng = rev[s[i]];
        rep(m,0,2) rep(l1,0,4) rep(l2,0,4) rep(r1,0,4) rep(r2,0,4) {
            auto cand = dp[i][l1][l2][r1][r2];
            if (cand == -INF) continue;

            set<int> amt;
            if (m == 0) {
                ll coal = calc(tng, l1, l2);
                
                dp[i+1][tng][l1][r1][r2] = max(dp[i+1][tng][l1][r1][r2], cand + coal);
            } else {
                ll coal = calc(tng, r1, r2);
                
                dp[i+1][l1][l2][tng][r1] = max(dp[i+1][l1][l2][tng][r1], cand + coal);
            }
        }
    }

    ll ans = 0;
    rep(l1,0,4) rep(l2,0,4) rep(r1,0,4) rep(r2,0,4) {
        ans = max(ans, dp[n][l1][l2][r1][r2]);
    }

    cout << ans << endl;
}

signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);

    int t = 1;
    // cin >> t;
    while (t--)
        solve();
}
#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...