#include "advisor.h"
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <string>
using namespace std;
int get_bit_len(int N){
if (N<=5000)return 14;
if (N<=25000)return 15;
return 19;
}
int get_num(string txt){
int c=0;
for (int i = txt.size()-1;i>=0;--i){
int ri = txt.size()-i-1;
if (txt[i]=='1')c+=pow(2,ri);
}
return c;
}
string getstuff(int num, int N){
const int k = get_bit_len(N);
string xd;
if (k==14)xd = bitset<14>(num).to_string();
if (k==15)xd = bitset<15>(num).to_string();
if (k==19)xd = bitset<19>(num).to_string();
return xd;
}
void ComputeAdvice(int *C, int N, int K, int M) {
queue<int> lastc[N];
int slots2[N];
memset(slots2, -1, sizeof slots2);
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> kiwi;
for (int i = 0; i<N;++i)lastc[C[i]].push(i);
for (int i = 0 ; i < K; ++i){kiwi.push({lastc[i].front(),i});slots2[i]=i;}
for (int i = 0; i <N;++i){
int c = C[i];
lastc[c].pop();
if (slots2[c]==-1){
pair<int,int> it = kiwi.top();kiwi.pop();
//while (it.first <= i || it.second != c ){it = kiwi.top();kiwi.pop();}
int c2 = it.second;
int slot = slots2[c2];
string t_write = getstuff(slot, K);
for (auto x : t_write)WriteAdvice(x);
slots2[c2]=-1;
slots2[c]=slot;
}
if (lastc[c].size()>0)kiwi.push({lastc[c].front(), c});
else kiwi.push({N+1, c});
}
}
#include "assistant.h"
void Assist(unsigned char *A, int N, int K, int R) {
int i;
for (i = 0; i < N; i++) {
int req = GetRequest();
if (req >= K)
PutBack(req % K);
}
}
# | 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... |