제출 #1219231

#제출 시각아이디문제언어결과실행 시간메모리
1219231Mans21Painting Walls (APIO20_paint)C++20
100 / 100
282 ms16836 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; const int maxn = 100'000 + 12; vector<int> g[maxn], u[maxn]; int Cur[maxn], cnt[maxn]; bool is[maxn]; int minimumInstructions( int n, int m, int k, vector<int> c, vector<int> A, vector<vector<int>> B) { for(int i = 0; i < m; i++) { sort(B[i].begin(), B[i].end()); for(int x : B[i]) { g[x].push_back(i); } } for(int j = 0; j < n; j++) { u[max(0, j - m + 1)].push_back(j); for(int i : g[c[j]]) { int val = (i - j) % m; if(val < 0) val += m; val++; } } for(int i = 0; i < n; i++) { for(int y : u[i]) { for(int x : g[c[y]]) { int val = (x - y) % m; if(val < 0) val += m; cnt[Cur[val]]--; Cur[val]++; cnt[Cur[val]]++; } } is[i] = (cnt[m] > 0); for(int x : g[c[i]]) { int val = (x - i) % m; if(val < 0) val += m; cnt[Cur[val]]--; Cur[val]--; cnt[Cur[val]]++; } } int ans = 0, last = -1e9, cur = -1e9; for(int i = 0; i < n; i++) { if(is[i]) last = i; if(i - cur >= m) { if(i - last >= m) { return -1; } cur = last; 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...