/* For the advisor */
#include <bits/stdc++.h>
void WriteAdvice(unsigned char a);
#define MAX 505000
bool conselho[MAX];
int local[MAX],menciona[MAX];
typedef std::pair<int,int> pii;
void ComputeAdvice(int *C, int N, int K, int M) {
// std::cout<<"Show"<<std::endl;
std::map<int,std::deque<int>> mapa;
for(int i=0;i!=N;++i){
mapa[C[i]].push_back(i);
}
for(auto&x:local)x=-1;
std::priority_queue<pii> queue;
for(int i=0;i!=K;++i){
int x=1e9;
if(mapa[i].size())x=mapa[i].front();
queue.push({x,i});
local[i]=x;
menciona[i]=i;
}
// std::cout<<"blz"<<std::endl;
///Menciona -> Guarda a cordenada da instrucao q menciona
///Local -> Diz o proximo valor da queue
for(int i=0;i!=N;++i){
int quer = C[i];
///A cor esta no andaime
if(local[quer]!=-1){
///Registra que tem que manter a cor do cara anterior
conselho[menciona[quer]]=1;
///Anda com a cor atual
mapa[quer].pop_front();
///Pega a proxima cor atual
int x=1e9;
if(mapa[quer].size())x=mapa[i].front();
///Joga na queue
queue.push({x,i});
///Atualiza o local
local[quer]=x;
///Gera a cord
menciona[quer]=i+K;
continue;
}
///Procurar cor mais distante
int cord = -1;
while(queue.size()){
auto __ = queue.top();
queue.pop();
if(__.first!=local[__.second])continue;
cord=__.second;
break;
}
///Anda com a cor atual
mapa[quer].pop_front();
///Pega a proxima cor atual
int x=1e9;
if(mapa[quer].size())x=mapa[i].front();
///Joga na queue
queue.push({x,i});
///Atualiza o local
local[quer]=x;
///Zera a cord (nao existe mais)
local[cord]=-1;
///Gera a cord
menciona[quer]=i+K;
}
// std::cout<<"Ok envia:"<<std::endl;
for(int i=0;i!=N+K;++i){
// std::cout<<" "<<conselho[i]<<" ";
WriteAdvice(conselho[i]);
}
// std::cout<<std::endl;
}
/* For the player */
#include <bits/stdc++.h>
int GetRequest();
void PutBack(int T);
void Assist(unsigned char *A, int N, int K, int R) {
std::map<int,int> paleta;
std::vector<int> lixo;
for(int i=0;i!=K;++i){
paleta[i]=i+1;
if(!A[i])lixo.push_back(i);
}
// std::cout<<"Ok recebe:"<<std::endl;
for(int i=0;i!=N+K;++i){
// std::cout<<" "<<(int)A[i]<<" ";
}
// std::cout<<std::endl;
for(int i=0;i!=N;++i){
int x = GetRequest();
// std::cout<<"Recebe "<<x<<" "<<(int)A[i+K]<<std::endl;
if(paleta[x]){
// std::cout<<"Ja tem :)"<<std::endl;
if(!(A[i+K])){
lixo.push_back(paleta[x]-1);
paleta[x]=0;
}
}else {
int b = lixo.back();
lixo.pop_back();
PutBack(b);
if(A[i+K])
paleta[x]=b+1;
else lixo.push_back(x);
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2572 KB |
Output is correct |
2 |
Incorrect |
2 ms |
2616 KB |
Error - Putting back a color that is not on the scaffold |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
16 ms |
8892 KB |
Error - Putting back a color that is not on the scaffold |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
198 ms |
53696 KB |
Error - Putting back a color that is not on the scaffold |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
9 ms |
5184 KB |
Error - Putting back a color that is not on the scaffold |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
257 ms |
65448 KB |
Error - Putting back a color that is not on the scaffold |
2 |
Incorrect |
267 ms |
65856 KB |
Error - Putting back a color that is not on the scaffold |
3 |
Incorrect |
252 ms |
66236 KB |
Error - Putting back a color that is not on the scaffold |
4 |
Incorrect |
257 ms |
66236 KB |
Error - Putting back a color that is not on the scaffold |
5 |
Incorrect |
268 ms |
66428 KB |
Error - Putting back a color that is not on the scaffold |
6 |
Incorrect |
252 ms |
66376 KB |
Error - Putting back a color that is not on the scaffold |
7 |
Incorrect |
259 ms |
66208 KB |
Error - Putting back a color that is not on the scaffold |
8 |
Incorrect |
286 ms |
66312 KB |
Error - Putting back a color that is not on the scaffold |
9 |
Incorrect |
250 ms |
66428 KB |
Error - Putting back a color that is not on the scaffold |
10 |
Incorrect |
297 ms |
80172 KB |
Error - Not putting back color when it is not on the scaffold |