제출 #383293

#제출 시각아이디문제언어결과실행 시간메모리
383293ritul_kr_singhJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
9 ms5624 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define sp << " " << #define nl << "\n" int dp[2][1<<18], pos[3][1<<18]; int n, k; string s; void calc(int x, char C){ int cnt = 0; pos[x][0] = -1; for(int i=0; i+1<n; ++i){ if(s[i]==C) pos[x][++cnt] = i; if(cnt>=k) dp[x][i] = i-pos[x][cnt-k+1]+1-k; else dp[x][i] = n+n; } } signed main(){ cin.tie(0)->sync_with_stdio(0); cin >> n >> k >> s; calc(0, 'J'); reverse(s.begin(), s.end()); calc(1, 'I'); int ans = n+n, cnt = 0; for(int i=0; i<n; ++i){ if(s[i]=='O') pos[2][++cnt] = i; if(cnt>=k){ int a = pos[2][cnt-k+1] ? dp[1][pos[2][cnt-k+1]-1] : n+n; int b = i+1<n ? dp[0][n-2-i] : n+n; ans = min(ans, a + b + i-pos[2][cnt-k+1]+1-k); } } if(ans>=n) ans = -1; cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...