Submission #1200054

#TimeUsernameProblemLanguageResultExecution timeMemory
1200054JungPSData Transfer (IOI19_transfer)C++20
100 / 100
50 ms1728 KiB
#include "transfer.h"
#include<iostream>
using namespace std;
vector<int> get_attachment(vector<int> source) {
	int n,ck;
	if(source.size()==255) n=255,ck=8;
	else n=63,ck=6;
	vector<int> ss={};
	for(int i=0;i<ck;++i){
		int tmp=0;
		for(int cur=(1<<i);cur<=source.size();cur+=(1<<(i+1))){
			for(int j=0;j<(1<<i);++j){
				//cout << cur+j-1 << " ";
				tmp+=source[cur+j-1];
			}
		}
		//cout << endl;
		ss.push_back(tmp%2);
	}
	int tmp=0;
	for(int i=0;i<ss.size();++i) tmp+=ss[i];
	//for(auto i:ss) cout << i << " " ;
	//cout << " @ ";
	ss.push_back(tmp%2);
	return ss;
}

std::vector<int> retrieve(std::vector<int> data) {
	int ans=0;
	int n,ck;
	if(data.size()>=255) n=255,ck=8;
	else n=63,ck=6;
	for(int i=0;i<ck;++i){
		int tmp=0;
		for(int cur=(1<<i);cur<=n;cur+=(1<<(i+1))){
			for(int j=0;j<(1<<i);++j){
				tmp+=data[cur+j-1];
			}
		}
		if(data[n+i]!=tmp%2){
			ans+=(1<<i);
			//cout << i << " ";
		}
	}
	//cout << "ANS = " << ans-1 << endl;
	int tmp=0;
	for(int i=n;i<data.size()-1;++i) tmp+=data[i];
	if(tmp%2==data[n+ck] && ans-1!=-1){
		data[ans-1]=1-data[ans-1];
	}
	return std::vector<int>(data.begin(), data.end()-ck-1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...