Submission #1280428

#TimeUsernameProblemLanguageResultExecution timeMemory
1280428hanguyendanghuyJJOOII 2 (JOI20_ho_t2)C++20
0 / 100
1 ms568 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define fi first #define se second constexpr ll MAXN=1e6+5,MAXV=3e5,MOD=1e9+7,INF=1e18; ll n,m,i,j,p,k,ans,dem,pre[MAXN],suf[MAXN]; string s; ll dist(ll st,ll en){ return en-st+1-k; } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>k>>s; ll cntO=0,cntJ=0,cntI=0; queue<ll> O,I,J; pre[0]=suf[n]=-1; for(i=0;i<n;i++){ if(s[i]=='J') J.push(i); while(J.size()>k) J.pop(); if(J.size()==k) pre[i]=J.front(); else pre[i]=-1; } for(i=n-1;i>=0;i--){ if(s[i]=='I') I.push(i); while(I.size()>k) I.pop(); if(I.size()==k) suf[i]=I.front(); else suf[i]=-1; } ll ans=INF; for(i=0;i<n;i++){ if(s[i]=='O') O.push(i); while(O.size()>k) O.pop(); if(O.size()==k){ ll st=O.front(); if(suf[i+1]==-1||pre[st-1]==-1) continue; ll p=pre[st-1],s=suf[i+1]; ans=min(ans,dist(p,st-1)+dist(st,i)+dist(i+1,s)); } } if(ans==INF){ cout<<-1; return 0; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...