Submission #1176425

#TimeUsernameProblemLanguageResultExecution timeMemory
117642512345678Painting Walls (APIO20_paint)C++20
100 / 100
546 ms13128 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; const int nx=1e5+5, mx=5e4+5, kx=1e5+5; int dp[mx], mn[nx]; vector<int> g[kx]; vector<pair<int, int>> pv; int minimumInstructions(int N, int M, int K, std::vector<int> C, std::vector<int> A, std::vector<std::vector<int>> B) { for (int i=0; i<M; i++) for (auto x:B[i]) g[x].push_back(i); for (int i=0; i<M; i++) dp[i]=-1; for (int i=0; i<N; i++) { for (auto [idx, x]:pv) dp[idx]=x; vector<pair<int, int>> nw; mn[i]=1e9; for (auto idx:g[C[i]]) { if (dp[(idx-1+M)%M]==-1) nw.push_back({idx, i}), mn[i]=min(mn[i], i); else nw.push_back({idx, max(i-M+1, dp[(idx-1+M)%M])}), mn[i]=min(mn[i], max(i-M+1, dp[(idx-1+M)%M])); } for (auto [idx, x]:pv) dp[idx]=-1; //cout<<"debug "<<i<<' '<<mn[i]<<'\n'; pv=nw; } int cur=-1, lst=-2, ans=0; while (cur!=N-1) { int f=0; for (int i=cur; i>lst; i--) { if (mn[i+M]==i+1) { f=1; lst=i; ans++; cur=i+M; break; } } if (!f) return -1; } return ans; }
#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...