Submission #1255270

#TimeUsernameProblemLanguageResultExecution timeMemory
1255270kunzaZa183Miners (IOI07_miners)C++20
100 / 100
678 ms1216 KiB
#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  string s;
  cin >> s;

  vector<int> vii;
  for (auto a : s)
    if (a == 'M')
      vii.push_back(0);
    else if (a == 'B')
      vii.push_back(1);
    else if (a == 'F')
      vii.push_back(2);

  const int states = 10;
  map<vector<int>, map<vector<int>, int>> mmvii;
  mmvii[{}][{}] = 0;

  auto helper = [&](vector<int> vi, int x) -> pair<vector<int>, int> {
    if (vi.empty()) {
      return {{x}, 1};
    }
    if (vi.size() == 1) {
      if (vi.back() == x)
        return {vi, 1};
      vi.push_back(x);
      return {vi, 2};
    }

    if (vi[0] == x && vi[1] == x) {
      return {{x, x}, 1};
    }

    if (vi[0] != x && vi[1] != x && vi[0] != vi[1]) {
      return {{vi[1], x}, 3};
    }

    if (vi[0] == x) {
      return {{vi[1], x}, 2};
    }

    if (vi[1] == x) {
      return {{x, x}, 2};
    }

    if (vi[0] == vi[1]) {
      return {{vi[1], x}, 2};
    }
  };

  for (int i = 0; i < n; i++) {
    map<vector<int>, map<vector<int>, int>> tmp;
    for (auto &[vi, b] : mmvii) {
      for (auto &[vi2, val] : b) {
        auto [vi3, add] = helper(vi, vii[i]);
        auto &num = tmp[vi3][vi2];
        num = max(num, val + add);

        auto [vi4, add1] = helper(vi2, vii[i]);
        auto &num2 = tmp[vi][vi4];
        num2 = max(num2, val + add1);
      }
    }

    tmp.swap(mmvii);
  }

  int maxi = 0;

  for (auto &[vi, b] : mmvii) {
    for (auto &[vi2, val] : b) {
      maxi = max(maxi, val);
    }
  }

  cout << maxi << "\n";
}

Compilation message (stderr)

miners.cpp: In lambda function:
miners.cpp:52:3: warning: control reaches end of non-void function [-Wreturn-type]
   52 |   };
      |   ^
#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...