This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define sz(x) ( (int)(x).size() )
using LL = long long;
template<class T>
inline bool asMn(T &a, const T &b) { return a > b ? a = b, true : false; }
template<class T>
inline bool asMx(T &a, const T &b) { return a < b ? a = b, true : false; }
const int inf = 1e9;
mt19937 rng( (uint32_t)chrono::steady_clock::now().time_since_epoch().count() );
map<char, int> label{ { 'J', 0 }, { 'O', 1 }, { 'I', 2 } };
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef FourLeafClover
freopen("input", "r", stdin);
#endif // FourLeafCLover
int n, k; string s; cin >> n >> k >> s;
vector<array<int, 3> > pref(n + 1);
for (int i = 0; i < n; ++i) {
pref[i + 1] = pref[i];
++pref[i + 1][ label[ s[i] ] ];
}
auto get = [&](int be, int en, char c) { return pref[en][ label[c] ] - pref[be][ label[c] ]; };
auto findPos = [&](int i, char c) {
int l = i, r = n;
while (l < r) {
int mid = (l + r) >> 1;
if (get(i, mid + 1, c) >= k) r = mid;
else l = mid + 1;
}
return l;
};
int ans = inf;
for (int i = 0; i < n; ++i) {
int j = findPos(findPos(findPos(i, 'J'), 'O'), 'I');
if (j < n) asMn(ans, j - i + 1 - 3 * k);
}
cout << (ans == inf ? -1 : ans) << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |