제출 #557744

#제출 시각아이디문제언어결과실행 시간메모리
557744InternetPerson10벽 칠하기 (APIO20_paint)C++17
100 / 100
1138 ms17180 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; int BIG = 999999; int minimumInstructions( int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { vector<vector<int>> conts(K); vector<int> contCount(M); vector<int> valid(N); for(int i = 0; i < M; i++) { for(int j = 0; j < A[i]; j++) { conts[B[i][j]].push_back(i); } } int goodConts = 0; for(int i = 0; i < N; i++) { if(i >= M) { for(int g : conts[C[i-M]]) { int x = (g + N - (i - M)) % M; if(contCount[x] == M) { goodConts--; } contCount[x]--; } } for(int g : conts[C[i]]) { int x = (g + N - i) % M; contCount[x]++; if(contCount[x] == M) { goodConts++; } } if(goodConts) valid[i]++; } if(!valid[M-1]) return -1; multiset<int> s; s.insert(1); for(int i = M; i < N; i++) { if(!valid[i]) { valid[i] = BIG; s.insert(BIG); } else { valid[i] = *(s.begin()) + 1; s.insert(valid[i]); } if(i >= 2 * M - 1) { auto it = s.find(valid[i-M]); s.erase(it); } } if(valid[N-1] >= BIG) return -1; return valid[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...