Submission #864440

#TimeUsernameProblemLanguageResultExecution timeMemory
864440jk410Painting Walls (APIO20_paint)C++17
100 / 100
607 ms14932 KiB
#include "paint.h" #include <vector> using namespace std; vector<int> Workers[100000];//색 i를 칠할 수 있는 일꾼들 int D[50000];//연속으로 칠할 수 있는 벽의 개수 int E[50000];//D[i]가 마지막으로 갱신된 시점 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 (int j:B[i]) Workers[j].push_back(i); } fill(E,E+M,-1); vector<int> v; for (int i=0; i<N; i++){ bool flag=false; for (int j:Workers[C[i]]){//일꾼 j가 벽 i를 칠할 수 있다, D[j-i]를 갱신해야 int cur=((j-i)%M+M)%M; if (E[cur]!=i-1) D[cur]=0; if (++D[cur]>=M) flag=true; E[cur]=i; } if (flag) v.push_back(i); } int ret=0,prev=-1; for (int i=0; i<(int)v.size(); i++){ if (i==(int)v.size()-1||v[i+1]>prev+M){ if (v[i]>prev+M) return -1; ret++; prev=v[i]; } } if (prev!=N-1) return -1; return ret; }
#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...