Submission #757555

#TimeUsernameProblemLanguageResultExecution timeMemory
757555vjudge1JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
16 ms5588 KiB
// // main.cpp // HAZ // // Created by Nurbek Nurbagi // // #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> #define pb push_back #define ppb pop_back #define ff first #define ss second #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() typedef long double ld; typedef long long ll; using namespace std; int gcd (int a, int b) { while (b) { a %= b; swap (a, b); } return a; } const ll N = 2e5 + 7; const ll mod = 1e9 + 7; const ll inf = 1e18; const ld pi = 3.141592653589793; const ld eps = 1e-12; const ll zero = 0; const int A = 1e9 + 5; const int dx[4] = {0, -1, 0, 0}; const int dy[4] = {1, 0, -1, 1}; vector <ll> j(N), o(N), i(N); void solve() { int n, k; cin >> n >> k; string s; cin >> s; if (n == 3) { if (k == 1 and s == "JOI") cout << 0; else cout << -1; return; } j[0] = (s[1] == 'J'); o[0] = (s[1] == 'O'); i[0] = (s[1] == 'I'); for (int q = 1; q < n; q++) { j[q] = j[q - 1] + (s[q] == 'J'); o[q] = o[q - 1] + (s[q] == 'O'); i[q] = i[q - 1] + (s[q] == 'I'); } ll mx = 1e18; for(int q = 0; q < n; q++){ if (s[q] != 'J') continue; int l = q; int r = n; int x = j[q] + k - 1; int cnt = 0; while (l <= r) { int mid = (l + r) / 2; if (j[mid] >= x) { r = mid - 1; cnt = mid; } else l = mid + 1; } if (cnt == 0) continue; l = cnt + 1; r = n; x = o[l - 1] + k; cnt = 0; while(l <= r){ int mid = (l + r) / 2; if (o[mid] >= x) { r = mid - 1; cnt = mid; } else l = mid + 1; } if (cnt == 0) continue; l = cnt + 1; r = n; x = i[l - 1] + k; cnt = 0; while(l <= r){ int mid = (l + r) / 2; if (i[mid] >= x) { r = mid - 1; cnt = mid; } else l = mid + 1; } if (cnt == 0) continue; mx = min(mx, (ll)cnt - q + 1 - 3 * k); } if (mx == 1e18) { cout << -1; return; } cout << mx; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen("herding.in","r",stdin); // freopen("herding.out","w",stdout); int t = 1; // cin >> t; for (int i = 1; i <= t; i++) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...