제출 #1328016

#제출 시각아이디문제언어결과실행 시간메모리
1328016superbibiJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
5 ms1484 KiB
#include <iostream>
#include <string>
using namespace std;

int vj[200005], vo[200005], vi[200005];

int main()
{
    int n, k, cj = 1, co = 1, ci = 1, pj = 1, po = 1, pi = 1;
    string s;
    cin >> n >> k >> s;
    
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == 'J') { vj[cj++] = i; }
        if (s[i] == 'O') { vo[co++] = i; }
        if (s[i] == 'I') { vi[ci++] = i; }
    }
    
    // Initialized to a value larger than any possible valid answer
    int ans = n + 1; 
    
    // FIXED: Changed <= to < for cj, co, and ci
    while (pj + k - 1 < cj && po + k - 1 < co && pi + k - 1 < ci)
    {
        // Advance 'O' pointer
        while (po + k - 1 < co && vo[po] <= vj[pj + k - 1])
        {
            po++;
        }
        
        // Advance 'I' pointer
        if (po + k - 1 < co)
        {
            while (pi + k - 1 < ci && vi[pi] <= vo[po + k - 1])
            {
                pi++;
            }
        }
        
        // Calculate min cost if valid sequences were found
        if (pj + k - 1 < cj && po + k - 1 < co && pi + k - 1 < ci)
        {
            ans = min(ans, (vi[pi + k - 1] - vj[pj] + 1) - 3 * k);
        }
        
        pj++; // Slide the window forward
    }
    
    // Output result
    if (ans == n + 1)
    {
        cout << -1;
    }
    else
    {
        cout << ans;
    }
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...