제출 #211467

#제출 시각아이디문제언어결과실행 시간메모리
211467brcodeJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
19 ms5580 KiB
#include <iostream> using namespace std; const int MAXN = 5e5+5; int indj[MAXN]; int indo[MAXN]; int indi[MAXN]; int prefj[MAXN]; int prefo[MAXN]; int prefi[MAXN]; int ans = 1e9; int main(){ int n,k; cin>>n>>k; string s; cin>>s; s = '#'+s; for(int i=0;i<=n;i++){ indj[i] = 1e9; indo[i] = 1e9; indi[i] = 1e9; } for(int i=1;i<=n;i++){ prefj[i] = prefj[i-1]+(s[i]=='J'); prefo[i] = prefo[i-1]+(s[i]=='O'); prefi[i] = prefi[i-1]+(s[i]=='I'); //cout<<prefj[i]<<" "<<prefo[i]<<" "<<prefi[i]<<endl; indj[prefj[i]] = min(indj[prefj[i]],i); indo[prefo[i]] = min(indo[prefo[i]],i); indi[prefi[i]] = min(indi[prefi[i]],i); } for(int i=1;i<=n;i++){ int nxt = indj[prefj[i-1]+k]; //cout<<nxt<<endl; if(nxt>n){ break; } int nxt2 = indo[prefo[nxt]+k]; if(nxt2>n){ break; } int r = indi[prefi[nxt2]+k]; if(r>n){ break; } ans = min(ans,n-(3*k)-(i-1)-(n-r)); } if(ans == 1e9){ cout<<-1<<endl; return 0; } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...