제출 #1341916

#제출 시각아이디문제언어결과실행 시간메모리
1341916bilgetux38JJOOII 2 (JOI20_ho_t2)C++20
1 / 100
1 ms344 KiB
//0

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#pragma GCC optimize ("Ofast")

inline bool eksi(int n, int k, string str)
{
    int j = 0, o = 0, i = 0;
    int l = 0;
    while (l < n && j != k)
    {
        if (str[l] == 'J')
            ++j;
        ++l;
    }
    while (l < n && o != k)
    {
        if (str[l] == 'O')
            ++o;
        ++l;
    }
    while (l < n && i != k)
    {
        if (str[l] == 'I')
            ++i;
        ++l;
    }
    if (j+o+i != k*3)
    {
        cout<<-1<<endl;
        return 1;
    }
    return 0;
}

inline int mini(int n, int k, string str)
{
    int j = 0, o = 0, i = 0;
    int l = 0;
    while (j != k)
    {
        if (str[l] == 'J')
            ++j;
        ++l;
    }
    while (o != k)
    {
        if (str[l] == 'O')
            ++o;
        ++l;
    }
    while (i != k)
    {
        if (str[l] == 'I')
            ++i;
        ++l;
    }
    //
    //cout<<"l i "<<l<<endl;

    int x = l;
    i = 0;
    o = 0;
    j = 0;
    while (i != k)
    {
        if (str[l] == 'I')
            ++i;
        --l;
    }
    while (o != k)
    {
        if (str[l] == 'O')
            ++o;
        --l;
    }
    while (j != k)
    {
        if (str[l] == 'J')
            ++j;
        --l;
    }
    //cout<<"l i "<<l<<endl;
    return x - l - 1;
}

inline int maxj(int n, int k, string str)
{
    int j = 0, o = 0, i = 0;
    int l = n-1;
    while (i != k)
    {
        if (str[l] == 'I')
            ++i;
        --l;
    }
    while (o != k)
    {
        if (str[l] == 'O')
            ++o;
        --l;
    }
    while (j != k)
    {
        if (str[l] == 'J')
            ++j;
        --l;
    }
    //
    //cout<<"l j "<<l<<endl;

    int x = l;
    i = 0;
    o = 0;
    j = 0;
    while (j != k)
    {
        if (str[l] == 'J')
            ++j;
        ++l;
    }
    while (o != k)
    {
        if (str[l] == 'O')
            ++o;
        ++l;
    }
    while (i != k)
    {
        if (str[l] == 'I')
            ++i;
        ++l;
    }
    //cout<<"l j "<<l<<endl;
    return l - x - 1;
}

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int n,k;
    string str;
    cin>>n>>k>>str;
    if (eksi(n,k,str)) return 0;

    int mni = mini(n,k,str);
    int mxj = maxj(n,k,str);
    
    int mnn = min(mni,mxj);
    mnn -= k*3;
    cout<<mnn<<endl;
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...