Submission #1309623

#TimeUsernameProblemLanguageResultExecution timeMemory
1309623namhhPainting Walls (APIO20_paint)C++20
0 / 100
2 ms568 KiB
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e5+5;
int cur[N],dp[N],check[N];
vector<int>pos[N],t;
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]].push_back(i);
	}
	for(int i = 0; i < n; i++){
		vector<pii>dm;
		for(int col: pos[a[i]]){
			int loj = (col+m-1) % m;
			dm.push_back({col,cur[loj]+1});
		}
		if(i) for(int col: pos[a[i-1]]) cur[col] = 0;
		for(auto[x,y]: dm){
			if(y >= m) check[i-m+1] = 1;
			cur[x] = y; 
		}
	}
	dp[0] = 0;
	for(int i = 1; i <= n-m+1; i++) dp[i] = 1e9;
	for(int i = 0; i < n-m+1; i++){
		if(check[i]) t.push_back(i+1);
	}
	int l = 0;
	for(int r = 1; r < t.size(); r++){
		while(t[l] < t[r]-m) l++;
		dp[t[r]] = dp[t[l]]+1;
	}
	if(dp[n-m+1] >= 1e9) return -1;
	return dp[n-m+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...