Submission #1122787

#TimeUsernameProblemLanguageResultExecution timeMemory
1122787LucaIlieJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
10 ms1784 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> pos[256];

int main() {
    int n, k;
    string s;

    cin >> n >> k;
    cin >> s;

    for ( int i = 0; i < n; i++ )
        pos[s[i]].push_back( i );

    int minChanges = n + 1;
    int o = 0, i = 0;
    for ( int j = 0; j < pos['J'].size() - k + 1; j++ ) {
        while ( o < pos['O'].size() && pos['O'][o] < pos['J'][j + k - 1] )
            o++;

        if ( o + k - 1 >= pos['O'].size() )
            break;

        while ( i < pos['I'].size() && pos['I'][i] < pos['O'][o + k - 1] )
            i++;

        if ( i + k - 1 >= pos['I'].size() )
            break;

        int changes = pos['I'][i + k - 1] - pos['J'][j] + 1 - 3 * k;
        minChanges = min( minChanges, changes );
    }

    cout << (minChanges == n + 1 ? -1 : minChanges);

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...