Submission #1350536

#TimeUsernameProblemLanguageResultExecution timeMemory
1350536aaaaaaaaPainting Walls (APIO20_paint)C++20
0 / 100
0 ms836 KiB
#include <bits/stdc++.h>
#include "paint.h"

using namespace std;

const int inf = 1e6;

set<int> pos[5000], workers[5000];

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){
        pos[B[i][j]].insert(i);
    }
  }

  for(int i = 0; i < N; ++i){
    for(auto v : pos[C[i]]) workers[v].insert(i);
    if((int) pos[C[i]].size() == 0) return -1;
  }

  vector<int> dp(N + 5, inf);
  dp[0] = 0;

  auto fine_shyt = [&](int starting) -> bool {
    for(auto st_id : pos[C[starting]]){
        bool ok = 1;
        for(int i = starting; i < starting + M; ++i){
            int cur = ((st_id + i - starting) % M);
            if(workers[cur].find(i) == workers[cur].end()){
                ok = 0;
                break;
            }
        }
        if(ok) return 1;
    }
    return 0;
  };

  for(int i = 1; i <= N; ++i){
    if(i >= M && fine_shyt(i - M)){
        for(int j = i - M + 1; j <= i; ++j){
            dp[j] = min(dp[j], dp[i - M] + 1);
        }
    }
  }

  return (dp[N] >= inf ? -1 : dp[N]);
}
#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...