Submission #241606

#TimeUsernameProblemLanguageResultExecution timeMemory
241606verngutzJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
13 ms4476 KiB
#include <bits/stdc++.h>
#define err(args...) {}
#ifdef DEBUG
#include "_debug.cpp"
#endif
using namespace std;
using ll = long long;
using ld = long double;
template <typename T> using lim = numeric_limits<T>;
template <typename T> istream& operator>>(istream& is, vector<T>& a) { for(T& x : a) { is >> x; } return is; }
template <typename X, typename Y> istream& operator>>(istream& is, pair<X, Y>& p) { return is >> p.first >> p.second; }
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    int ans = lim<int>::max();
    vector<int> J, O, I, jumpJ(n + 1, -1), jumpO(n + 1, -1), jumpI(n + 1, -1);
    for(int i = 0; i < n; i++) {
        if(s[i] == 'J') {
            J.push_back(i);
        } else if(s[i] == 'O') {
            O.push_back(i);
        } else {
            I.push_back(i);
        }
    }
    for(int i = (k - 1 < J.size() ? J[k - 1] + 1 : n), j = 0; i < n; i++) {
        jumpJ[i] = J[j];
        if(s[i] == 'J') {
            j++;
        }
    }
    for(int i = (O.size() - k >= 0 ? O[O.size() - k] - 1 : -1), j = O.size() - 1; i >= 0; i--) {
        jumpO[i] = O[j];
        if(s[i] == 'O') {
            j--;
        }
    }
    for(int i = (I.size() - k >= 0 ? I[I.size() - k] - 1 : -1), j = I.size() - 1; i >= 0; i--) {
        jumpI[i] = I[j];
        if(s[i] == 'I') {
            j--;
        }
    }
    for(int i = 1; i < n; i++) {
        if(s[i] == 'O') {
            int j = jumpO[i - 1];
            if(jumpJ[i] != -1 and jumpO[i - 1] != -1 and jumpI[j] != -1) {
                ans = min(ans, (i - jumpJ[i]) + (j - i + 1) + (jumpI[j] - j) - 3 * k);
            }
        }
    }
    cout << (ans < lim<int>::max() ? ans : -1) << endl;
    return 0;
}

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:30:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = (k - 1 < J.size() ? J[k - 1] + 1 : n), j = 0; i < n; i++) {
                  ~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...