Submission #1281289

#TimeUsernameProblemLanguageResultExecution timeMemory
1281289dhuyyyyJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
18 ms5492 KiB
#include<bits/stdc++.h> #define fi first #define se second #define int long long using namespace std; using ll = long long; using ii = pair<int, int>; using aa = array<int,3>; const int N = 1e6+5; int n, k, ans = 1e18; int pre[3][N]; string s; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin >> n >> k >> s; while (!s.empty() && s.back() != 'I') s.pop_back(); reverse(s.begin(),s.end()); while (!s.empty() && s.back() != 'J') s.pop_back(); reverse(s.begin(),s.end()); if ((int)s.size() == 0) return cout << -1,0; n = (int)s.size(); s = ' ' + s; for (int i = 1; i <= n; i++){ for (int j = 0; j <= 2; j++){ pre[j][i] = pre[j][i-1]; } if (s[i] == 'J') pre[0][i]++; if (s[i] == 'O') pre[1][i]++; if (s[i] == 'I') pre[2][i]++; } for (int i = 1; i <= n; i++){ int J = lower_bound(pre[0] + 1,pre[0] + 1 + n,pre[0][i-1] + k) - pre[0]; int O = lower_bound(pre[1] + J,pre[1] + 1 + n,pre[1][J] + k) - pre[1]; int I = lower_bound(pre[2] + O,pre[2] + 1 + n,pre[2][O] + k) - pre[2]; if (max({J,O,I}) <= n){ ans = min(ans,I-i+1-k*3); } } cout << (ans == (int)1e18 ? -1 : ans); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...