Submission #966914

#TimeUsernameProblemLanguageResultExecution timeMemory
966914socpitePainting Walls (APIO20_paint)C++14
100 / 100
863 ms267288 KiB
#include "paint.h"

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5+5;

vector<int> pos[maxn];
vector<int> good[maxn];

int t[maxn], dp[maxn];

int minimumInstructions(
    int N, int M, int K, std::vector<int> C,
    std::vector<int> A, std::vector<std::vector<int>> B) {
	for(int i = 0; i < M; i++){
        for(auto v: B[i])pos[v].push_back(i);
    }
    for(int i = 0; i < N; i++){
        for(auto v: pos[C[i]])good[((v - i)%M + M)%M].push_back(i);
    }
    for(int i = 0; i < M; i++){
        int crr = 0, prv = -1;
        for(auto v: good[i]){
            if(v == prv + 1)crr++;
            else crr = 1;
            prv = v;
            if(crr >= M)t[v] = 1;
        }
    }
    int prv = -1, last = -1, ans = 0;
    for(int i = 0; i < N; i++){
        if(t[i])last = i;
        if(i - M == prv || i == N-1){
            if(last <= prv)return -1;
            prv = last;
            ans++;
        }
    }
    if(prv < N-1)return -1;
    return ans;
}
#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...