Submission #553797

#TimeUsernameProblemLanguageResultExecution timeMemory
553797Nereus922Painting Walls (APIO20_paint)C++17
12 / 100
84 ms20944 KiB
#include "paint.h" #include <bits/stdc++.h> #define pb push_back #define f first #define sc second using namespace std; typedef long long int ll; typedef string str; vector<set<int>> F; vector<int> can; vector<vector<int>> arra; int minimumInstructions(int n, int m, int K, vector<int> C, vector<int> A, vector<vector<int>> B){ F.resize(K); can.resize(n,0); arra.resize(K); for(int i = 0 ; i < m ; i++){ for(auto c : B[i]) F[c].insert(i); } for(int i = 0 ; i < n ; i++){ for(auto con : F[C[i]]){ int st = ((con%m - i%m) + m)%m; arra[st].pb(i); } } for(int i = 0 ; i < m ; i++){ int last = n+1,cnt = 0; for(auto e : arra[i]){ if(e != last + 1){ if(cnt >= m){ for(int j = last-cnt+1 ; j <= last-m+1 ; j++){ can[j] = 1; } } cnt = 0; } last = e; cnt++; } if(cnt >= m){ for(int j = last-cnt+1 ; j <= last-m+1 ; j++){ can[j] = 1; } } } if(can[0] == 0) return -1; for(int i = 0 ; i < n ; i++){ if(can[i] == 1) can[i] = i+m; else can[i] = can[i-1]; } int ans = 0; for(int i = 0 ; i < n ;){ if(can[i] <= i) return -1; i = can[i]; ans++; } 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...