# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1174239 | lmquan | JJOOII 2 (JOI20_ho_t2) | C++20 | 8 ms | 1932 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)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |