Submission #276090

#TimeUsernameProblemLanguageResultExecution timeMemory
276090islingrJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
31 ms3212 KiB
#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (auto i = (a); i < (b); ++i)
#define per(i, a, b) for (auto i = (b); i-- > (a); )
#define lb(x...) lower_bound(x)
#define ub(x...) upper_bound(x)

const int N = 1 << 18, inf = 1e9;
char s[N];
int ci[N], co[N], cj[N];

signed main() {
	cin.tie(nullptr)->sync_with_stdio(false);

	int n, k, res = inf; cin >> n >> k >> s;
	rep(i, 0, n) {
		cj[i + 1] = cj[i];
		co[i + 1] = co[i];
		ci[i + 1] = ci[i];
		if (s[i] == 'J') ++cj[i + 1];
		if (s[i] == 'O') ++co[i + 1];
		if (s[i] == 'I') ++ci[i + 1];
	}
	rep(l, 0, n) {
		int j = lb(cj + l, cj + n + 1, cj[l] + k) - cj;
		int o = lb(co + j, co + n + 1, co[j] + k) - co;
		int i = lb(ci + o, ci + n + 1, ci[o] + k) - ci;
		if (i == n + 1) break;
		res = min(res, i - l - 3 * k);
	}
	cout << (res < inf ? res : -1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...