Submission #1244877

#TimeUsernameProblemLanguageResultExecution timeMemory
1244877drakozsJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
37 ms5336 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx,avx2,fma") using namespace __gnu_pbds; #define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> #define ll long long #define MOD 998244353 #define MAXN 2e5 #define SIZE 314 using namespace std; int solve(string &s, int start, int n, int k, vector<ll> &J, vector<ll> &O, vector<ll> &I){ int curr = start; int l = curr, r = n - 1, mid; int bestPos = -1; while(l <= r){ mid = (r - l) / 2 + l; ll count = J[mid + 1] - J[curr]; if (count >= k){ bestPos = mid; r = mid - 1; } else{ l = mid + 1; } } if (bestPos == -1) return -1; curr = bestPos + 1; l = curr, r = n - 1; bestPos = -1; while(l <= r){ mid = (r - l) / 2 + l; ll count = O[mid + 1] - O[curr]; if (count >= k){ bestPos = mid; r = mid - 1; } else{ l = mid + 1; } } if (bestPos == -1) return -1; curr = bestPos + 1; l = curr, r = n - 1; bestPos = -1; while(l <= r){ mid = (r - l) / 2 + l; ll count = I[mid + 1] - I[curr]; if (count >= k){ bestPos = mid; r = mid - 1; } else{ l = mid + 1; } } if (bestPos == -1) return -1; curr = bestPos + 1; return curr - start; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; string s; cin >> s; vector<ll> J(n + 1), O(n + 1), I(n + 1); J[0] = O[0] = I[0] = 0; for (int i = 0; i < n; i++){ J[i + 1] = J[i]; O[i + 1] = O[i]; I[i + 1] = I[i]; if (s[i] == 'J') J[i+1]++; else if (s[i] == 'O') O[i+1]++; else I[i+1]++; } if (solve(s, 0, n, k, J, O, I) == -1){ cout << "-1\n"; return 0; } ll ans = n; for (int i = 0; i < n; i++){ ll curr = solve(s, i, n, k, J, O, I); if (curr != -1 && curr < ans) ans = curr; } cout << ans - 3 * k << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...