Submission #244860

#TimeUsernameProblemLanguageResultExecution timeMemory
244860NightlightJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
36 ms2944 KiB
#include <bits/stdc++.h> #define pii pair<int, int> using namespace std; int N, K; int sumJ[200005]; int sumO[200005]; int sumI[200005]; int cntJ, cntO, cntI; void calc(int l, int r) { cntJ = sumJ[r] - sumJ[l - 1]; cntO = sumO[r] - sumO[l - 1]; cntI = sumI[r] - sumI[l - 1]; } int main() { ios_base::sync_with_stdio(0); cin >> N >> K; char ch; for(int i = 1; i <= N; i++) { cin >> ch; if(ch == 'J') { sumJ[i] = 1; }else if(ch == 'O') { sumO[i] = 1; }else { sumI[i] = 1; } sumJ[i] += sumJ[i - 1]; sumO[i] += sumO[i - 1]; sumI[i] += sumI[i - 1]; } int ans = 1e9; for(int i = 1; i <= N; i++) { int l = i, r = N, res = -1; // cout << i << "\n"; //binser J while(l <= r) { int mid = (l + r) >> 1; calc(i, mid); if(cntJ >= K) { res = mid; r = mid - 1; }else { l = mid + 1; } } // cout << res << " J\n"; if(res == -1) break; //binser O int bef = res + 1; l = res + 1, r = N, res = -1; while(l <= r) { int mid = (l + r) >> 1; calc(bef, mid); if(cntO >= K) { res = mid; r = mid - 1; }else { l = mid + 1; } } // cout << res << " O\n"; if(res == -1) break; //binser I bef = res + 1; l = res + 1, r = N, res = -1; while(l <= r) { int mid = (l + r) >> 1; calc(bef, mid); if(cntI >= K) { res = mid; r = mid - 1; }else { l = mid + 1; } } // cout << res << " I\n"; if(res == -1) break; ans = min(ans, res - i + 1 - K * 3); } if(ans != 1e9) cout << ans << "\n"; else cout << "-1\n"; cin >> N; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...