Submission #1222157

#TimeUsernameProblemLanguageResultExecution timeMemory
1222157giorgi123glmJJOOII 2 (JOI20_ho_t2)C++20
0 / 100
0 ms320 KiB
#include <algorithm>
#include <functional>
#include <iostream>
#include <list>
#include <map>
using namespace std;

#define int long long

signed main () {
    ios::sync_with_stdio (false);
    cin.tie (0);
    cout.tie (0);

    int N = 0, K = 0;
    cin >> N >> K;

    string str = "";
    cin >> str;

    str = " " + str;

    vector <int> nJ (N + 1);
    nJ[N] = N + 1;
    for (int i = N - 1; i >= 1; i--)
        if (str[i + 1] == 'J')
            nJ[i] = i + 1;
        else
            nJ[i] = nJ[i + 1];

    vector <int> nO (N + 1);
    nO[N] = N + 1;
    for (int i = N - 1; i >= 1; i--)
        if (str[i + 1] == 'O')
            nO[i] = i + 1;
        else
            nO[i] = nO[i + 1];

    vector <int> nI (N + 1);
    nI[N] = N + 1;
    for (int i = N - 1; i >= 1; i--)
        if (str[i + 1] == 'I')
            nI[i] = i + 1;
        else
            nI[i] = nI[i + 1];

    for (int i = N - 1; i >= 1; i--)
        if (str[i] == 'J') {
            int ind = i;
            bool can = 1;
            int ans = 0;
            
            for (int _ = 1; _ < K; _++)
                if (ind == N + 1) {
                    can = 0;
                    break;
                } else {
                    ans += nJ[ind] - ind - 1;
                    ind = nJ[ind];
                }
            for (int _ = 0; _ < K; _++)
                if (ind == N + 1) {
                    can = 0;
                    break;
                } else {
                    ans += nO[ind] - ind - 1;
                    ind = nO[ind];
                }
            for (int _ = 0; _ < K; _++)
                if (ind == N + 1) {
                    can = 0;
                    break;
                } else {
                    ans += nI[ind] - ind - 1;
                    ind = nI[ind];
                }

            if (can) {
                cout << ans << '\n';
                return 0;
            }
        }
    
    cout << -1 << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...