Submission #253742

#TimeUsernameProblemLanguageResultExecution timeMemory
253742SortingJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
45 ms5668 KiB
#include <bits/stdc++.h> using namespace std; const int k_N = 2e5 + 3; int n, k; string s, joi = "JOI"; int nxt[k_N][3]; int cnt[k_N][3]; int sum(int l, int r, int idx){ if(l == 0) return cnt[r][idx]; return cnt[r][idx] - cnt[l - 1][idx]; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k; cin >> s; for(int j = 0; j < 3; ++j) cnt[0][j] = (s[0] == joi[j]); for(int i = 1; i < s.size(); ++i) for(int j = 0; j < 3; ++j) cnt[i][j] = (s[i] == joi[j]) + cnt[i - 1][j]; for(int i = 0; i < n; ++i){ for(int idx = 0; idx < 3; ++idx){ int l = i, r = n; while(l != r){ int mid = (l + r) >> 1; if(sum(i, mid, idx) >= k) r = mid; else l = mid + 1; } nxt[i][idx] = l; } //cout << "nxt[" << i << "] = " << l << "\n"; } nxt[n][0] = nxt[n][1] = nxt[n][2] = n; int ans = n + 1; for(int i = 0; i < n; ++i){ if(s[i] != 'J') continue; int curr = i; if(nxt[curr][0] != n){ curr = nxt[curr][0] + 1; if(nxt[curr][1] != n){ curr = nxt[curr][1] + 1; if(nxt[curr][2] != n){ int en = nxt[curr][2]; ans = min(ans, en - i + 1 - 3 * k); } } } } if(ans == n + 1) ans = -1; cout << ans << "\n"; }

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:28:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1; i < s.size(); ++i)
                    ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...