Submission #770689

#TimeUsernameProblemLanguageResultExecution timeMemory
770689JellyTheOctopusJJOOII 2 (JOI20_ho_t2)C++17
13 / 100
2076 ms3572 KiB
#include <bits/stdc++.h> using namespace std; int N, K; string s; int main() { cin >> N >> K >> s; vector<int> J, O, I; for (int i = 0; i < (int)s.size(); i++) { if (s[i] == 'J') J.push_back(i+1); else if (s[i] == 'O') O.push_back(i+1); else I.push_back(i+1); } O.push_back(INT_MAX); I.push_back(INT_MAX); int ans = INT_MAX; for (int i = 0; i+K-1 < (int)J.size(); i++) { int cur = 0; vector<int> arr; for (int j = i; j < i+K; j++) { if (!arr.empty()) cur += J[j]-arr.back()-1; arr.push_back(J[j]); } int u = upper_bound(O.begin(), O.end(), arr.back())-O.begin(); if (u == INT_MAX) break; bool flag = false; for (int j = u; j < u+K; j++) { if (O[j] == INT_MAX) { flag = true; break; } cur += O[j]-arr.back()-1; arr.push_back(O[j]); } if (flag) break; u = upper_bound(I.begin(), I.end(), arr.back())-I.begin(); if (u == INT_MAX) break; for (int j = u; j < u+K; j++) { if (I[j] == INT_MAX) { flag = true; break; } cur += I[j]-arr.back()-1; arr.push_back(I[j]); } if (flag) break; ans = min(ans, cur); } if (ans == INT_MAX) ans = -1; cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...