Submission #1159083

#TimeUsernameProblemLanguageResultExecution timeMemory
1159083Zero_OPPainting Walls (APIO20_paint)C++20
100 / 100
125 ms14408 KiB
#include <bits/stdc++.h> #ifndef LOCAL #include "paint.h" #endif using namespace std; #define FOR(i, l, r) for(int i = (l); i < (r); ++i) #define ROF(i, r, l) for(int i = (r) - 1; i >= (l); --i) #define mp make_pair #define mt make_tuple #define ff first #define ss second #define all(v) begin(v), end(v) #define rall(v) rbegin(v), rend(v) #define sz(v) (int)v.size() #define compact(v) v.erase(unique(all(v)), end(v)) #define pb push_back #define eb emplace_back #define dbg(x) "[" #x " = " << (x) << "]" #define readFile(task) freopen(task, "r", stdin) #define writeFile(task) freopen(task, "w", stdout) template<typename T> bool minimize(T& a, const T& b){ if(a > b) return a = b, true; return false; } template<typename T> bool maximize(T& a, const T& b){ if(a < b) return a = b, true; return false; } using ll = long long; using db = double; using ull = unsigned long long; using ld = long double; using pi = pair<int, int>; using pl = pair<ll, ll>; using pd = pair<db, db>; using vi = vector<int>; using vl = vector<ll>; using vd = vector<db>; using vb = vector<bool>; using vpi = vector<pi>; using vpl = vector<pl>; using vvi = vector<vi>; using vvl = vector<vl>; int minimumInstructions(int N, int M, int K, vi C, vi A, vvi B){ vi can(N); vvi have(K); ROF(i, M, 0){ sort(all(B[i])); compact(B[i]); A[i] = sz(B[i]); for(auto c : B[i]) have[c].pb(i); } vi tm(2 * N, -1), v(2 * N); FOR(i, 0, N){ for(auto pos : have[C[i]]){ int f = (tm[pos+M-1] == i-1 ? v[pos+M-1] : 0) + 1; tm[pos+M] = i; v[pos+M] = f; if(f >= M) can[i-M+1] = 1; } for(auto pos : have[C[i]]){ int f = (pos > 0 ? (tm[pos-1] == i-1 ? v[pos-1] : 0) : 0) + 1; tm[pos] = i; v[pos] = f; if(f >= M) can[i-M+1] = 1; } } int cnt = 0; int need = 0, longest = -100; FOR(i, 0, N){ if(can[i]) maximize(longest, i + M - 1); if(i == need){ if(longest < i) return -1; ++cnt; need = longest+1; } } return cnt; } #ifdef LOCAL void setIO(){ // ios_base::sync_with_stdio(0); cin.tie(0); #ifdef LOCAL readFile("task.inp"); // writeFile("task.out"); #endif // LOCAL } int main(){ setIO(); int N, M, K; cin >> N >> M >> K; vi C(N); FOR(i, 0, N) cin >> C[i]; vi A(M); vector<vi> B(M); FOR(i, 0, M){ cin >> A[i]; B[i].resize(A[i]); FOR(j, 0, A[i]){ cin >> B[i][j]; } } cout << minimumInstructions(N, M, K, C, A, B) << '\n'; return 0; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...