Submission #1292091

#TimeUsernameProblemLanguageResultExecution timeMemory
1292091Hamed_GhaffariPainting Walls (APIO20_paint)C++20
100 / 100
141 ms13304 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;

#define maxs(a, b) (a = max(a, b))

const int MXN = 1e5+5;

vector<int> vec[MXN];
int mx[MXN], val[2][MXN];

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++)
            vec[B[i][j]].push_back(i);
    for(int i : vec[C[N-1]]) {
        val[(N-1)&1][i] = 1;
        mx[N-1] = 1;
    }
    for(int i=N-2; i>=0; i--) {
        if(i+2<N)
            for(int j : vec[C[i+2]])
                val[i&1][j] = 0;
        for(int j : vec[C[i]])
            maxs(mx[i], val[i&1][j] = val[(i&1)^1][(j+1)%M]+1);
    }
    int ans = 0;
    int av=0;
    int lst=-1;
    while(av<N) {
        ans++;
        bool fnd = 0;
        for(int i=av; i>lst; i--)
            if(mx[i]>=M) {
                fnd = 1;
                lst = av;
                av = i+M;
            }
        if(!fnd) 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...