Submission #292942

#TimeUsernameProblemLanguageResultExecution timeMemory
292942arnold518Painting Walls (APIO20_paint)C++14
63 / 100
1582 ms16376 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int INF = 1e9; const int MAXN = 1e5; const int MAXM = 5e4; const int MAXK = 1e5; int N, M, K; int C[MAXN+10], A[MAXM+10]; vector<int> B[MAXM+10]; vector<int> D[MAXK+10]; int dp[MAXN+10]; int P[MAXM+10]; int minimumInstructions(int _N, int _M, int _K, vector<int> _C, vector<int> _A, vector<vector<int>> _B) { N=_N; M=_M; K=_K; for(int i=1; i<=N; i++) C[i]=_C[i-1]; for(int i=0; i<M; i++) A[i]=_A[i]; for(int i=0; i<M; i++) B[i]=_B[i]; for(int i=0; i<M; i++) { for(auto it : B[i]) { D[it].push_back(i); } } for(int i=1; i<=N; i++) if(D[C[i]].empty()) return -1; for(int i=1; i<M; i++) { for(auto it : D[C[i]]) { P[((it-i)%M+M)%M]++; } } int cnt=0; for(int i=0; i<M; i++) if(P[i]==M) cnt++; deque<int> DQ; for(int i=1; i<=N; i++) dp[i]=INF; DQ.push_back(0); DQ.push_back(M-1); for(int i=M; i<=N; i++) { if(i!=M) for(auto it : D[C[i-M]]) { if(P[((it-i)%M+M)%M]==M) cnt--; P[((it-i)%M+M)%M]--; } for(auto it : D[C[i]]) { P[((it-i)%M+M)%M]++; if(P[((it-i)%M+M)%M]==M) cnt++; } while(!DQ.empty() && DQ.front()<i-M) DQ.pop_front(); if(cnt && dp[DQ.front()]!=INF) dp[i]=dp[DQ.front()]+1; while(!DQ.empty() && dp[DQ.back()]>=dp[i]) DQ.pop_back(); DQ.push_back(i); } if(dp[N]==INF) return -1; else return dp[N]; }
#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...