This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "paint.h"
#include <bits/stdc++.h>
#define MAX 105000
typedef std::pair<int,int> pii;
std::map<pii,pii> pai;
int mod(int p,int M){
p%=M;
if(p<0)p+=M;
return p;
}
void check(pii k){
if(pai.find(k)==pai.end()){
pai[k]=k;
}
}
pii find(pii x){
check(x);
if(pai[x]==x)
return x;
return pai[x]=find(pai[x]);
}
void Union(pii a,pii b){
a=find(a);
b=find(b);
if(a!=b)
pai[a]=b;
}
bool pode[MAX];
int minimumInstructions(int N, int M, int K, std::vector<int> C, std::vector<int> A, std::vector<std::vector<int>> B) {
pai.clear();
std::map<int,std::vector<int>> curte;
std::map<pii,bool> aprovado;
for(int i=0;i!=M;++i){
for(auto& x:B[i]){
curte[x].push_back(i);
aprovado[{x,i}]=true;
}
}
for(int i=0;i!=N-1;++i){
int cor1 = C[i],cor2 = C[i+1];
for(auto&x:curte[cor1]){
int tipo = x,prox = mod(x+1,M);
if(aprovado.find({cor2,prox})!=aprovado.end())
{
/// std::cout<<"Liga "<<i<<" "<<tipo<<" com: "<<i+1<<" "<<prox<<"\n";
Union({i,tipo},{i+1,prox});
}
}
}
for(int i=0;i!=N;++i){
int fim = i+M-1;
if(fim>=N)break;
for(auto&x:curte[C[i]]){
int ultimo_pintor = mod(x-1,M);
pii alpha = find({i,x});
pii beta = find({fim,ultimo_pintor});
/// std::cout<<"Busca "<<i<<" "<<x<<" "<<fim<<" "<<ultimo_pintor<<"\n";
/// std::cout<<alpha.first<<" "<<alpha.second<<" "<<beta.first<<" "<<beta.second<<"!\n";
if(alpha==beta){
/// std::cout<<"Conexao "<<i<<" "<<fim<<"\n";
pode[i]=true;
break;
}
}
}
std::priority_queue<pii,std::vector<pii>,std::greater<pii>> queue;
int min = 1e9;
int last=0;
for(int i=0;i!=N+1;++i){
int ans=1e9;
if(i){
while(queue.size()){
auto __ = queue.top();
///Invalido
if(__.second<i-M){
queue.pop();
continue;
}
ans=__.first;
break;
}
}else ans=0;
if(pode[i])
queue.push({ans+1,i});
/// std::cout<<"Custo "<<ans<<" ("<<i<<")\n";
last=ans;
}
if(last==1e9)return -1;
///Sucesso
return last;
}
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:72:9: warning: unused variable 'min' [-Wunused-variable]
72 | int min = 1e9;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |