Submission #583935

#TimeUsernameProblemLanguageResultExecution timeMemory
583935KanaifuJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
18 ms2864 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define fr first #define sc second int n, k; int pref1[200001], pref2[200001], pref3[200001]; int bin_search1(int val) { int l = 1, r = n; while(l<=r) { int mid = ((l+r)>>1); if (pref1[mid] < val) { l = mid+1; } else { r = mid - 1; if (pref1[mid] < val) { return mid; } } } if (l>n) { return -1; } return l; } int bin_search2(int val) { int l = 1, r = n; while(l<=r) { int mid = ((l+r)>>1); if (pref2[mid] < val) { l = mid+1; } else { r = mid - 1; if (pref2[mid] < val) { return mid; } } } if (l>n) { return -1; } return l; } int bin_search3(int val) { int l = 1, r = n; while(l<=r) { int mid = ((l+r)>>1); if (pref3[mid] < val) { l = mid+1; } else { r = mid - 1; if (pref3[mid] < val) { return mid; } } } if (l>n) { return -1; } return l; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin>>n>>k; pref1[0] = 0; pref2[0] = 0; pref3[0] = 0; for (int i=1; i<=n; i++) { char c; cin>>c; pref1[i] = pref1[i-1]; pref2[i] = pref2[i-1]; pref3[i] = pref3[i-1]; if (c == 'J') { pref1[i]++; } else if (c == 'O') { pref2[i]++; } else { pref3[i]++; } } int mn = 1e9; for (int i=1; i<=n; i++) { int st = pref1[i]; int poz2; if (pref1[i-1] == pref1[i]) { continue; } poz2 = bin_search1(st+k-1); if (poz2 == -1) { continue; } st = pref2[poz2]; int poz3 = bin_search2(st+k); if (poz3 == -1) { continue; } st = pref3[poz3]; int kraj = bin_search3(st+k); if (kraj == -1) { continue; } mn = min(mn, kraj - i + 1 - 3 * k); } if (mn == 1e9) { cout<<-1; return 0; } cout<<mn; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...