Submission #1352288

#TimeUsernameProblemLanguageResultExecution timeMemory
1352288po_rag526Painting Walls (APIO20_paint)C++20
0 / 100
20 ms488 KiB
#include "paint.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back()
int minimumInstructions(
    int N, int M, int K, std::vector<int> C,
    std::vector<int> A, std::vector<std::vector<int>> B) {
	vector<vector<bool>> cn(M, vector<bool>(N)); 
	int id=0;
	map<int,int>mp;
	for(int i=0;i<N;i++)mp[C[i]];
	for(auto p:mp)mp[p.ff]=id++;
	for(int i=0;i<N;i++)C[i]=mp[C[i]];
	
	for(int i=0;i<M;i++){
		int m=A[i];
		for(int j=0;j<m;j++){
			cn[i][B[i][j]]=1;
		}
	}
	vector<int>dp(N);
	for(int i=0;i<N;i++)dp[i]=1e9;
	for(int i=M-1;i<N;i++){
		for(int r=0;r<M;r++){ 
			bool FLAG=1;
			for(int j=0;j<M;j++){
				int p= (j+r)%M;
				if(cn[p][C[i- (M-j-1)]]==0)FLAG=0;
			}
			if(FLAG){
				if(i==M-1){
					for(int j=0;j<M;j++)dp[j]=1;
				}
				else{
					for(int j=0;j<M;j++)dp[i-j]=min(dp[i-j],dp[i-M]+1);
				}
			}
		}
	}
	if(dp[N-1]==1e9)dp[N-1]=-1;
	return dp[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...