Submission #1233379

#TimeUsernameProblemLanguageResultExecution timeMemory
1233379inesfiData Transfer (IOI19_transfer)C++20
80 / 100
79 ms1728 KiB
#include "transfer.h"
#include<bits/stdc++.h>
using namespace std;

vector<int> binaire(int a,int cb){
	vector<int> r={};
	while (cb>0){
		cb--;
		r.push_back(a%2);
		a/=2;
	}
	return r;
}

vector<int> get_attachment(vector<int> source) {
	int n=source.size();
	int somme=0;
	for (int i=0;i<n;i++){
		if (source[i]==1){
			somme+=i+1;
		}
	}
	vector<int> rep=binaire(somme,(int)log2(n*n));
	//cout<<(int)log2(n*n)<<endl;
	int parite=0;
	for (auto r:rep){
		parite+=r;
	}
	parite%=2;
	rep.push_back(parite);
	/*for (auto i:rep){
		cout<<i<<" ";
	}
	cout<<endl;*/
	return rep;
}

vector<int> retrieve(vector<int> tab) {
	int n;
	if (tab.size()>250){
		n=255;
	}
	else {
		n=63;
	}
	int parite=0;
	int somme=0;
	int puiss=1;
	for (int i=n;i<(int)tab.size()-1;i++){
		parite+=tab[i];
		somme+=tab[i]*puiss;
		puiss*=2;
	}
	vector<int> rep={};
	for (int i=0;i<n;i++){
		rep.push_back(tab[i]);
	}
	if (parite%2!=tab.back()){
		return rep;
	}
	int nouv=0;
	for (int i=0;i<n;i++){
		if (tab[i]==1){
			nouv+=i+1;
		}
	}
	if (nouv==somme){
		return rep;
	}
	if (nouv>somme){
		rep[nouv-somme-1]=0;
	}
	else {
		rep[somme-nouv-1]=1;
	}
	/*for (int i=0;i<n;i++){
		cout<<rep[i]<<" ";
	}
	cout<<endl;*/
	return rep;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...