제출 #1167952

#제출 시각아이디문제언어결과실행 시간메모리
1167952j_vdd16 Martian DNA (BOI18_dna)C++20
100 / 100
57 ms2628 KiB
#include <algorithm> #include <bitset> #include <cstdint> #include <cstring> #include <iostream> #include <limits.h> #include <math.h> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #include <chrono> //#define int long long #define loop(X, N) for(int X = 0; X < (N); X++) #define all(V) V.begin(), V.end() #define rall(V) V.rbegin(), V.rend() using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vector<ii>> vvii; typedef vector<bool> vb; typedef vector<vector<bool>> vvb; int main() { int n, k, r; cin >> n >> k >> r; vi dna(n); loop(i, n) cin >> dna[i]; vi requirements(k); loop(i, r) { int b, q; cin >> b >> q; requirements[b] = q; } int best = INT_MAX; int rPtr = 0; int reqSat = 0; vi freq(k); loop(i, n) { while (rPtr < n && reqSat < r) { int base = dna[rPtr]; freq[base]++; if (requirements[base] == freq[base]) reqSat++; rPtr++; } if (reqSat == r) best = min(best, rPtr - i); int base = dna[i]; if (requirements[base] == freq[base]) reqSat--; freq[base]--; } if (best == INT_MAX) cout << "impossible" << endl; else cout << best << 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...