Submission #547482

#TimeUsernameProblemLanguageResultExecution timeMemory
547482Deepesson벽 칠하기 (APIO20_paint)C++17
40 / 100
1602 ms186656 KiB
#include "paint.h" #include <bits/stdc++.h> #define MAX 105000 typedef std::pair<int,int> pii; std::map<pii,pii> pai; std::map<pii,int> size; 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; size[k]=1; } } 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){ if(size[a]>size[b])std::swap(a,b); pai[a]=b; size[a]+=size[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) { 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:75:9: warning: unused variable 'min' [-Wunused-variable]
   75 |     int min = 1e9;
      |         ^~~
#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...