Submission #287996

#TimeUsernameProblemLanguageResultExecution timeMemory
287996emanIaicepsaLast supper (IOI12_supper)C++17
40 / 100
445 ms16112 KiB
#include "advisor.h"
#include<bits/stdc++.h>
#define pb emplace_back
#define pii pair<ll,ll>
#define all(n) (n).begin(),(n).end()
#define ll long long
using namespace std;

int pos[100005], bk[100005], in[100005];

void Write(int x,int N){
	int mx = __lg(N);
	vector<int> v;
	for(int i=0;i<=mx;i++){
		v.pb(x&1);
		x>>=1;
	}
	reverse(all(v));
	for(auto &i:v){
		WriteAdvice(i);
	}
}

void ComputeAdvice(int *C, int N, int K, int M) {
	for(int i=0;i<N;i++){
		pos[i] = N+1;
	}
	for(int i=N-1;i>=0;i--){
		bk[i] = pos[C[i]];
		pos[C[i]] = i;
	}
	priority_queue<pii> pq;
	for(int i=0;i<K;i++){
		in[i] = 1;
		pq.push({pos[i],i});
		//cout<<i<<" "<<pos[i]<<'\n';
	}
	for(int i=0;i<N;i++){
		if(in[C[i]]){
			pq.push({bk[i], C[i]});
		}
		else{
			int x = pq.top().second; pq.pop();
			pq.push({bk[i], C[i]});
			in[C[i]] = 1, in[x] = 0;
			Write(x,N);
		}
	}
}
#include<bits/stdc++.h>
#include "assistant.h"
using namespace std;
int in2[100005];

void Assist(unsigned char *A, int N, int K, int R) {
	int id = 0;
	for(int i=0;i<K;i++) in2[i] = 1;
	for(int i=0;i<N;i++){
		int x = GetRequest();
		if(in2[x]) continue;
		
		int rm = 0;
		for(int j=id;id<=j+__lg(N);id++){
			rm = rm * 2 + A[id];
		}
		//cout<<"RM : "<<rm<<'\n';
		PutBack(rm);
		in2[rm] = 0;
		in2[x] = 1;
	}
	assert(id <= R);
}
#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...