# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
547692 | Deepesson | 벽 칠하기 (APIO20_paint) | C++17 | 569 ms | 14940 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "paint.h"
#include <bits/stdc++.h>
#define MAX 100004
typedef std::pair<int,int> pii;
bool pode[MAX];
std::vector<int> curte[MAX];
int turno[MAX];
int seq[MAX];
int mod(int p,int M){
p%=M;
if(p<0)p+=M;
return p;
}
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& x:B[i]){
curte[x].push_back(i);
}
}
for(int i=0;i!=N;++i){
int cor1 = C[i];
for(int j=0;j!=curte[cor1].size();++j){
auto x = curte[cor1][j];
int codigo = mod(i-x,M);
if(turno[codigo]!=(i-1))seq[codigo]=0;
++seq[codigo];
turno[codigo]=i;
if(seq[codigo]>=M){
pode[i-M+1]=true;
}
}
}
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;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |