Submission #58856

#TimeUsernameProblemLanguageResultExecution timeMemory
58856thiago4532Last supper (IOI12_supper)C++17
0 / 100
413 ms15408 KiB
#include "advisor.h"
#include <bits/stdc++.h>

using namespace std;

string to_binary(int x){
	string str;
	for(int i=12;i>=0;i--)
		str += (bool(x&(1<<i)) + '0');
	return str;
}

void ComputeAdvice(int *C, int N, int K, int M) {
	for(int i=0;i<N;i++){
		string s = to_binary(C[i]);

		for(int i=0;i<13-int(s.size());i++) WriteAdvice(0);

		for(auto& e : s)
			WriteAdvice(e-'0');
	}
}
	
#include "assistant.h"
#include <bits/stdc++.h>

using namespace std;

int to_int(string const& s){
	int ans=0, ct=0;
	for(int i=s.size()-1;i>=0;i--)
		ans += ((s[i]-'0') * (1<<ct)), ++ct;
	return ans;
}

const int inf = 0x3f3f3f3f;
void Assist(unsigned char *A, int N, int K, int R) {
	vector<int> C;
	vector<int> last(N);

	for(int i=0;i<13*N;i+=13){
		string s;
		for(int j=0;j<13;j++)
			s += (A[j+i]+'0');
		C.push_back(to_int(s));
	}

	for(int i=0;i<N;i++)
		last[i] = 0x3f3f3f3f;

	for(int i=0;i<N;i++)
		last[C[i]] = i;

	set<pair<int, int>, greater<pair<int, int>>> conj;

	for(int i=0;i<K;i++)
		conj.insert({last[i], i});

	for(int i=0;i<N;i++){
		GetRequest();
		if(conj.find({last[C[i]], C[i]}) != conj.end())
			continue;

		auto it = conj.begin();
		PutBack(it->second);
		conj.erase(it);

		if(last[C[i]] == i) last[C[i]] = 0x3f3f3f3f;
		conj.insert({last[C[i]], C[i]});
	}
}
#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...