Submission #717533

#TimeUsernameProblemLanguageResultExecution timeMemory
717533alvingogoPainting Walls (APIO20_paint)C++14
63 / 100
1574 ms15916 KiB
#include "paint.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> a, vector<vector<int> > b) { vector<int> aval(n); int mod=m; vector<vector<int> > gg(k); for(int i=0;i<m;i++){ for(auto h:b[i]){ gg[h].push_back(i); } } vector<int> t(m); vector<int> x(m); for(int i=0;i<n;i++){ for(auto h:gg[c[i]]){ int u=((h-i)%mod+mod)%mod; t[u]++; x[u]=1; if(t[u]>=m){ aval[i]=1; } } if(i){ for(auto h:gg[c[i-1]]){ int u=((h-(i-1))%mod+mod)%mod; if(!x[u]){ t[u]=0; } } } for(auto h:gg[c[i]]){ int u=((h-i)%mod+mod)%mod; x[u]=0; } } multiset<int> s; s.insert(0); vector<int> dp(n); for(int i=0;i<m-1;i++){ dp[i]=1e9; s.insert(1e9); } for(int i=m-1;i<n;i++){ if(aval[i]){ dp[i]=(*s.begin())+1; } else{ dp[i]=1e9; } if(i==m-1){ s.erase(s.find(0)); } else{ s.erase(s.find(dp[i-m])); } s.insert(dp[i]); } if(dp[n-1]>5e8){ return -1; } return dp[n-1]; }
#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...