#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<=6000)return 12;
if (N<=25000)return 15;
return 19;
}
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>> kiwi;
for (int i = 0; i<N;++i)lastc[C[i]].push(i);
for (int i = 0 ; i < K; ++i){
if (lastc[i].size()>0)kiwi.push({lastc[i].front(),i});
else kiwi.push({N+1,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();
int c2 = it.second;
int slot = slots2[c2];
//cout<<it.first<<" "<<it.second<<" "<<kiwi.size()<<endl;
//cout<<kiwi.top().first<<" "<<kiwi.top().second<<" "<<kiwi.size()<<endl;
string t_write = getstuff(slot, K);
//cout<<t_write<<endl;
for (char x : t_write){
if (x=='0')WriteAdvice(0);
if (x=='1')WriteAdvice(1);
}
slots2[c2]=-1;
slots2[c]=slot;
}
if (lastc[c].size()>0)kiwi.push({ lastc[c].front(),c});
else kiwi.push({ N+1,c});
}
}
#include <cstring>
#include <iostream>
#include <cmath>
#include <string>
#include <queue>
#include <algorithm>
#include "assistant.h"
using namespace std;
int globallen;
int get_bit_len2(int N){
if (N<=5000)return 12;
if (N<=25000)return 15;
return 19;
}
void Assist(unsigned char *A, int N, int K, int R) {
int slots[N];
int slot2[N];
globallen=get_bit_len2(K);
memset(slots, -1, sizeof slots);memset(slot2, -1, sizeof slot2);
for (int i = 0 ; i < K;++i){slots[i]=i;slot2[i]=i;}
int i;
int p=0;
for (i = 0; i < N; i++) {
int req = GetRequest();
if (slots[req]==-1){
int slot=0;
for (int j = p*globallen; j < (p+1)*globallen;++j){
if (A[j]!=0)slot+=pow(2, (p+1)*globallen - j - 1);
}
//cout<<slot<<endl;
++p;
//reverse(adv.begin(),adv.end());
//cout<<adv<<endl;
slots[req]=slot;
slots[slot2[slot]]=-1;
PutBack(slot2[slot]);
slot2[slot]=req;
}
}
}
# | 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... |