#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];
int actans = 2e9;
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)
actans = min (actans, ans);
}
if (actans == 2e9)
cout << -1 << '\n';
else
cout << actans << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |