제출 #1205517

#제출 시각아이디문제언어결과실행 시간메모리
1205517minhpkJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
29 ms11596 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int a,b; string s; int prefix[1000005][4]; int nxt[300005][3]; int min1=1e18; int check(int sta,int i){ int l=sta; int r=a; int pos=-1; while (l<=r){ int mid=(l+r)/2; if (prefix[mid][i]-prefix[sta-1][i]>=b){ pos=mid; r=mid-1; }else{ l=mid+1; } } return pos; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a >> b; cin >> s; s='#'+s; for (int i=1;i<=a;i++){ prefix[i][1]=prefix[i-1][1]+(s[i]=='J'); prefix[i][2]=prefix[i-1][2]+(s[i]=='O'); prefix[i][3]=prefix[i-1][3]+(s[i]=='I'); } for (int i=1;i<=a;i++){ nxt[i][1]=check(i,1); nxt[i][2]=check(i,2); nxt[i][3]=check(i,3); } for (int i=1;i<=a;i++){ if (s[i]!='J'){ continue; } int l=i; int r=i; r=nxt[r][1]; if (r==-1){ continue; } r=nxt[r][2]; if (r==-1){ continue; } r=nxt[r][3]; if (r==-1){ continue; } min1=min(min1,r-l+1-3*b); } if (min1==1e18){ cout << -1 << "\n"; }else{ cout << min1 << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...