Submission #1200609

#TimeUsernameProblemLanguageResultExecution timeMemory
1200609Mohamed_Kachef06벽 칠하기 (APIO20_paint)C++17
28 / 100
1593 ms6472 KiB
#include "paint.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin() , x.end()
const int N = 1e5 , K = 1e5; 

bool valid[N+1]; 
int dp[N+1]; 
vector<int> f[K+1]; 

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 (auto j : B[i]) f[j].push_back(i); 
   }

    for (int x = 0 ; x < M ; x++){
      for (int y = 0 ; y <= N - M ; y++){
        bool v = 1;
          for (int l = 0 ; l < M ; l++){
            int cons = (x + l)%M , cell = C[y + l]; 
            v&= binary_search(all(f[cell]) , cons); 
          }
          valid[y]|=v; 
      }
    }
    for (int i = 1 ; i <= N ; i++) dp[i] = 2e9; 
    for (int i = 1 ; i <= N ; i++){
      for (int j = max(0 , i-M) ; j <= min(i , N-M) ; j++){
         if (valid[j]) dp[i] = min(dp[i] , dp[j] + 1); 
      }
    }
    return (dp[N] == 2e9 ? -1 : dp[N]); 
}


// dp[i] = min(dp[j]) for all j >= i - m and there 
#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...