Submission #383164

#TimeUsernameProblemLanguageResultExecution timeMemory
383164ScarletSJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
32 ms3340 KiB
#include <bits/stdc++.h>
using namespace std;

int p[200001][3];

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n,k,ans,l,r,m,x;
    cin>>n>>k;
    ans=n;
    string s;
    cin>>s;
    for (int i=0;i<n;++i)
    {
        for (int j=0;j<3;++j)
            p[i+1][j]=p[i][j];
        if (s[i]=='J')
            ++p[i+1][0];
        if (s[i]=='O')
            ++p[i+1][1];
        if (s[i]=='I')
            ++p[i+1][2];
    }
    for (int i=1;i<=n;++i)
    {
        if (p[n][0]-p[i-1][0]<k)
            break;
        x=i-1;l=x+1;r=n;
        while (l<r)
        {
            m=l+(r-l)/2;
            if (p[m][0]-p[x][0]<k)
                l=m+1;
            else
                r=m;
        }
        if (p[n][1]-p[l][1]<k)
            break;
        x=l;l=x+1;r=n;
        while (l<r)
        {
            m=l+(r-l)/2;
            if (p[m][1]-p[x][1]<k)
                l=m+1;
            else
                r=m;
        }
        if (p[n][2]-p[l][2]<k)
            break;
        x=l;l=x+1;r=n;
        while (l<r)
        {
            m=l+(r-l)/2;
            if (p[m][2]-p[x][2]<k)
                l=m+1;
            else
                r=m;
        }
        ans=min(ans,l-i+1-k*3);
    }
    if (ans==n)
        ans=-1;
    cout<<ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...