Submission #1318010

#TimeUsernameProblemLanguageResultExecution timeMemory
1318010_8_8_Painting Walls (APIO20_paint)C++17
0 / 100
1596 ms7224 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll N = 3e5 + 5; const ll INF = 1e9 + 5; const ll MOD = 998244353; int dp[N], ch[N], ans = 0; vector<vector<ll>> v(N); void calc(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { vector<int> cord; for(int i = 0; i <= N - M; i++) { int ok = 0; for(auto x : v[C[i]]) { int need = M - 1, worker = (x + 1) % M, cur = i + 1, curok = 1; while(need) { int id = lower_bound(v[C[cur]].begin(), v[C[cur]].end(), worker) - v[C[cur]].begin(); if(id < v[C[cur]].size() && v[C[cur]][id] == worker) { need--; worker = (worker + 1) % M; cur++; } else { curok = 0; break; } } ok |= curok; if(ok) { break; } } if(ok) { cord.push_back(i); } } ll l = 0, r = 0, sum = 0, can = 1; while(true) { int id = upper_bound(cord.begin(), cord.end(), r) - cord.begin(); if(id != 0) { id--; r = cord[id] + M; l = cord[id] + 1; sum++; if(r >= N) { break; } } else { ans = -1; can = 0; break; } } if(can) { ans = sum; } } 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++) { for(int j = 0; j < A[i]; j++) { v[B[i][j]].push_back(i); } } for(int i = 0; i < K; i++) { sort(v[i].begin(), v[i].end()); } calc(N, M, K, C, A, B); for(int i = 0; i < K; i++) v[i].clear(); for(int i = 0; i < N; i++) ch[i] = dp[i] = 0; 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...