Submission #908490

#TimeUsernameProblemLanguageResultExecution timeMemory
908490ItamarPainting Walls (APIO20_paint)C++14
100 / 100
647 ms14580 KiB
#include "paint.h"
using namespace std;
#include <vector>
#define vi vector<int>
int minimumInstructions(int N, int M, int K, std::vector<int> C,std::vector<int> A, std::vector<std::vector<int>> B) {
	int ans = 0;
	vector<bool> dp(N);
	int sum = 0;
	vi g(M);
	vector<vi> fr(K);
	for (int i = 0; i < M; i++) {
		for (int j = 0; j < A[i]; j++) {
			fr[B[i][j]].push_back(i);
		}
	}
	for (int i = N - M; i < N; i++) {
		for (int j : fr[C[i]]) {
			g[(M+i-j)%M]++;
			if (g[(M+i - j) % M] == M)sum++;
		}
	}
	dp[N - M] = (sum > 0);
	for (int i = N - M-1; i >= 0; i--) {
		for (int j : fr[C[i]]) {
			g[(M + i - j) % M]++;
			if (g[(M + i - j) % M] == M)sum++;
		}
		for (int j : fr[C[M+i]]) {
			g[(M + i - j) % M]--;
			if (g[(M + i - j) % M] == M-1)sum--;
		}
		dp[i] = (sum>0);
	}
	int maxi = -1, nex = 0;
	for (int i = 0; i <= N - M; i++) {
		if (dp[i])maxi = i + M - 1;
		if (i == N - M) {
			if (maxi == N-1)return ans + 1;
			return -1;
		}
		if (i == nex) {
			if (maxi < i)return -1;
			nex = maxi+1;
			maxi = -1;
			ans++;
		}
	}
}

Compilation message (stderr)

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:7:19: warning: control reaches end of non-void function [-Wreturn-type]
    7 |  vector<bool> 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...