Submission #851149

# Submission time Handle Problem Language Result Execution time Memory
851149 2023-09-18T16:23:43 Z comgaTramAnh Miners (IOI07_miners) C++14
100 / 100
27 ms 26056 KB
#include <iostream>
#include <string>
#include <math.h>
int f[100005][4][4][4];
int n;
std::string s; 
int shipment[100005]; 

int calc(int a, int b, int c) {
  int ret = 0;
  if (a == 1 || b == 1 || c == 1) {
    ret++;
  }
  if (a == 2 || b == 2 || c == 2) {
    ret++;
  }
  if (a == 3 || b == 3 || c == 3) {
    ret++;
  }
  return ret; 
}

int main () {
  std::cin >> n;
  std::cin >> s; 
  for (int i = 1; i <= n; i++) {
    if (s[i - 1] == 'M') {
      shipment[i] = 1; 
    }
    else if (s[i - 1] == 'B') {
      shipment[i] = 2; 
    }
    else {
      shipment[i] = 3; 
    }
  }
  for (int i = 0; i <= n; i++) {
    for (int a = 0; a <= 3; a++) {
      for (int b = 0; b <= 3; b++) {
        for (int c = 0; c <= 3; c++) {
          f[i][a][b][c] = -1; 
        }
      }
    }
  }
  f[0][0][0][0] = 0; 
  for (int i = 0; i < n; i++) {
    for (int a = 0; a <= 3; a++) {
      for (int b = 0; b <= 3; b++) {
        for (int c = 0; c <= 3; c++) {
          if (f[i][a][b][c] == -1) {
            continue; 
          }
          f[i + 1][shipment[i]][b][c] = std::max(f[i + 1][shipment[i]][b][c], f[i][a][b][c] + calc(shipment[i], shipment[i + 1], a));
          f[i + 1][c][a][shipment[i]] = std::max(f[i + 1][c][a][shipment[i]], f[i][a][b][c] + calc(shipment[i + 1], b, c));
        }
      }
    }
  }
  int ans = -1; 
  for (int a = 0; a <= 3; a++) {
    for (int b = 0; b <= 3; b++) {
      for (int c = 0; c <= 3; c++) {
        ans = std::max(ans, f[n][a][b][c]);
      }
    }
  }
  std::cout << ans;
  return 0; 
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8828 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 21444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 27 ms 26056 KB Output is correct