Submission #1336632

#TimeUsernameProblemLanguageResultExecution timeMemory
1336632sh_qaxxorov_571 Martian DNA (BOI18_dna)C++20
100 / 100
22 ms2756 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    // Tezkor kiritish-chiqarish
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int N, K, R;
    if (!(cin >> N >> K >> R)) return 0;

    vector<int> dna(N);
    for (int i = 0; i < N; i++) {
        cin >> dna[i]; // DNK satrini o'qish [cite: 16]
    }

    vector<int> target(K, 0); // Talab qilingan miqdorlar
    for (int i = 0; i < R; i++) {
        int b, q;
        cin >> b >> q;
        target[b] = q; // B nukleobaza uchun Q miqdor [cite: 19]
    }

    vector<int> current_count(K, 0); // Hozirgi oynadagi miqdorlar
    int satisfied_count = 0;
    int min_length = N + 1;
    int left = 0;

    for (int right = 0; right < N; right++) {
        int base = dna[right];
        current_count[base]++;

        // Agar bu nukleobaza talab qilingan bo'lsa va miqdori yetarli bo'lsa
        if (target[base] > 0 && current_count[base] == target[base]) {
            satisfied_count++;
        }

        // Barcha R ta talab bajarilganda oynani chapdan qisqartiramiz 
        while (satisfied_count == R) {
            min_length = min(min_length, right - left + 1);

            int left_base = dna[left];
            if (target[left_base] > 0 && current_count[left_base] == target[left_base]) {
                satisfied_count--;
            }
            current_count[left_base]--;
            left++;
        }
    }

    // Natijani chiqarish [cite: 22, 23]
    if (min_length > N) {
        cout << "impossible" << endl;
    } else {
        cout << min_length << endl;
    }

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