Submission #1174239

#TimeUsernameProblemLanguageResultExecution timeMemory
1174239lmquanJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
8 ms1932 KiB
#define taskname ""
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int kInf = 2000000000;

int main() {
  if (fopen(taskname".inp", "r")) {
    freopen(taskname".inp", "r", stdin);
    freopen(taskname".out", "w", stdout);
  }
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, k;
  string s;
  cin >> n >> k >> s;
  s = "#" + s;
  vector<char> x = {'J', 'O', 'I'};
  int p = 1;
  for (int i = 1; i <= n; i++) {
    if (s[i] == x[(p - 1) / k]) {
      p++;
      if (p == 3 * k + 1) {
        break;
      }
    }
  }
  if (p != 3 * k + 1) {
    cout << -1;
    return 0;
  }
  vector<int> j, o, i;
  for (int _ = 1; _ <= n; _++) {
    if (s[_] == 'J') {
      j.push_back(_);
    } else if (s[_] == 'O') {
      o.push_back(_);
    } else {
      i.push_back(_);
    }
  }


  int result = kInf;
  for (int m = 0; m + k - 1 < j.size(); m++) {
    int t = j[m + k - 1];
    auto it = upper_bound(o.begin(), o.end(), t);
    if (it == o.end()) {
      continue;
    }
    int f = it - o.begin();
    if (f + k - 1 >= o.size()) {
      continue;
    }
    it = upper_bound(i.begin(), i.end(), o[f + k - 1]);
    if (it == i.end()) {
      continue;
    }
    int s = it - i.begin();
    if (s + k - 1 >= i.size()) {
      continue;
    }
    result = min(result, i[s + k - 1] - j[m] + 1 - 3 * k);
  }

  cout << result;


  return 0;
}

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:10:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     freopen(taskname".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
ho_t2.cpp:11:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |     freopen(taskname".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...