Submission #821457

#TimeUsernameProblemLanguageResultExecution timeMemory
821457Alihan_8JJOOII 2 (JOI20_ho_t2)C++17
0 / 100
1 ms320 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define pb push_back #define ln '\n' #define int long long template <class _T> bool chmin(_T &x, const _T &y){ bool flag = false; if ( x > y ){ x = y; flag |= true; } return flag; } template <class _T> bool chmax(_T &x, const _T &y){ bool flag = false; if ( x < y ){ x = y; flag |= true; } return flag; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; string s; cin >> s; const int inf = 1e15 + 1; vector <int> pf(n + 1, inf), sf(n + 1, inf); deque <int> dq; for ( int i = 0; i < n; i++ ){ if ( s[i] == 'J' ){ dq.pb(i); } if ( (int)dq.size() > k ){ dq.pop_front(); } if ( (int)dq.size() < k ){ continue; } pf[i + 1] = (i - dq[0] + 1) - k; } dq.clear(); for ( int i = n - 1; i >= 0; i-- ){ if ( s[i] == 'I' ){ dq.push_front(i); } if ( (int)dq.size() > k ){ dq.pop_back(); } if ( (int)dq.size() < k ){ continue; } sf[i + 1] = (dq[k - 1] - i + 1) - k; } vector <int> dp(n + 2, inf); for ( int i = n; i > 0; i-- ){ dp[i] = min(dp[i + 1], sf[i] + i); } int it = 1, f = 0, ans = inf; for ( int i = 1; i <= n; i++ ){ if ( i > 1 ){ f -= (s[i - 1] == 'O'); } while ( it + 1 <= n and f < k ){ f += (s[it] == 'O'); it++; } if ( f < k ){ break; } chmin(ans, (pf[i] - i) + dp[it + 1] - k - 1); } if ( ans == inf ){ ans = -1; } cout << ans; cout << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...