Submission #1267331

#TimeUsernameProblemLanguageResultExecution timeMemory
1267331gayJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
16 ms5332 KiB
#include <bits/stdc++.h> #include <experimental/random> #include <random> using namespace std; using ll = long long; using ld = long double; const ll INF = 1e18, MOD = 998244353; void solve(); signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll q = 1; //cin >> q; while (q--) { solve(); } } void solve() { ll n, k; cin >> n >> k; string s; cin >> s; vector<ll> p1(n + 1), p2(n + 1), p3(n + 1); for (int i = 0; i < s.size(); i++) { p1[i + 1] = p1[i], p2[i + 1] = p2[i], p3[i + 1] = p3[i]; if (s[i] == 'J') { p1[i + 1]++; } if (s[i] == 'O') { p2[i + 1]++; } if (s[i] == 'I') { p3[i + 1]++; } } ll ans = INF; for (int i = 0; i < n; i++) { ll st = i; if (s[st] != 'J') { continue; } ll cnt = 0; ll l = st - 1, r = n - 1; if (p1[n] - p1[st] < k) { continue; } while (r - l > 1) { ll mid = (l + r) / 2; if (p1[mid + 1] - p1[st] >= k) { r = mid; } else { l = mid; } } cnt += r - st - k + 1; st = r + 1; l = st - 1, r = n - 1; if (p2[n] - p2[st] < k) { continue; } while (r - l > 1) { ll mid = (l + r) / 2; if (p2[mid + 1] - p2[st] >= k) { r = mid; } else { l = mid; } } cnt += r - st - k + 1; st = r + 1; l = st - 1, r = n - 1; if (p3[n] - p3[st] < k) { continue; } while (r - l > 1) { ll mid = (l + r) / 2; if (p3[mid + 1] - p3[st] >= k) { r = mid; } else { l = mid; } } cnt += r - st - k + 1; ans = min(ans, cnt); } if (ans == INF) { cout << -1; } else { cout << ans; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...