Submission #1080775

#TimeUsernameProblemLanguageResultExecution timeMemory
1080775juicyMiners (IOI07_miners)C++17
100 / 100
730 ms108960 KiB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif

const char key[] = {'M', 'B', 'F'};

const int N = 1e5;

int n;
int A[N];
int dp[N][4][4][4][4];

int count(int a, int b, int c) {
  vector<int> k;
  for (auto x : {a, b, c}) {
    if (x < 3) {
      k.push_back(x);
    }
  }
  sort(k.begin(), k.end());
  return unique(k.begin(), k.end()) - k.begin();
}

int f(int i, int a, int b, int x, int y) {
  if (i == n) {
    return 0;
  }
  int &res = dp[i][a][b][x][y];
  if (~res) {
    return res;
  }
  int c = A[i];
  res = f(i + 1, b, c, x, y) + count(a, b, c);
  res = max(res, f(i + 1, a, b, y, c) + count(x, y, c));
  return res;
}

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

  cin >> n;
  for (int i = 0; i < n; ++i) {
    char c; cin >> c;
    A[i] = find(key, key + 3, c) - key;
  }
  memset(dp, -1, sizeof(dp));
  cout << f(0, 3, 3, 3, 3);
  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...