Submission #226462

#TimeUsernameProblemLanguageResultExecution timeMemory
226462thebesJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
25 ms5812 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int MN = 2e5+5; int N, K, i, j, psa[MN][3], dp[MN][3], ans=1<<30; string s; int main(){ cin >> N >> K >> s; s.insert(s.begin(),' '); for(i=1;i<=N;i++){ for(j=0;j<3;j++) psa[i][j]=psa[i-1][j]; if(s[i]=='J') psa[i][0]++; else if(s[i]=='O') psa[i][1]++; else if(s[i]=='I') psa[i][2]++; } memset(dp,-1,sizeof(dp)); for(int k=0;k<3;k++){ for(i=j=1;i<=N;i++){ while(j+1<=i&&psa[i][k]-psa[j][k]>=K) j++; if(psa[i][k]-psa[j-1][k]<K) continue; if(!k) dp[i][k]=i-j+1-K; else if(dp[j-1][k-1]!=-1) dp[i][k]=dp[j-1][k-1]+i-j+1-K; } } for(i=1;i<=N;i++){ if(dp[i][2]!=-1) ans=min(ans,dp[i][2]); } printf("%d\n",ans==1<<30?-1:ans); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...