Submission #864606

#TimeUsernameProblemLanguageResultExecution timeMemory
864606ThylOneData Transfer (IOI19_transfer)C++14
100 / 100
44 ms2596 KiB
#include "transfer.h"
#include<bits/stdc++.h>

using namespace std;


std::vector<int> get_attachment(std::vector<int> source) {
	int lenCode = 7;
	if(source.size()!=63){
		lenCode = 9;
	}
	int xorIndex=0;
	int xor0;
	for(int i=1;i<=source.size();i++){
		if(source[i-1]){
			xorIndex^=i;
		}
		
	}
	
	vector<int> bits(lenCode);
	int sum=0;
	for(int i=0;i<lenCode-1;i++){
		bits[i]=(xorIndex>>i)&1;
		sum+=bits[i];
	}
	bits[lenCode-1]=sum&1;
	return bits;
}

std::vector<int> retrieve(std::vector<int> data) {
	int lenCode=9;
	if(data.size()==63+7){
		lenCode=7;
	}
	int len = data.size()-lenCode;
	int xorIndex=0;
	
	for(int i=1;i<=len;i++){
		
		if(data[i-1]){
			xorIndex^=i;
		}
	}
	int restitution=0;
	int sum=0;
	for(int i=0;i<lenCode-1;i++){
		if(data[i+len]){
			restitution+=(1<<i);
		}
		sum+=data[i+len];
	}
	
	int fake = xorIndex^restitution;

	vector<int> real=data;
	for(int i=0;i<lenCode;i++)real.pop_back();
	if(fake>0 && !((sum&1)!=data[data.size()-1]))
		real[fake-1] = !real[fake-1];
	
	
	return real;
}

Compilation message (stderr)

transfer.cpp: In function 'std::vector<int> get_attachment(std::vector<int>)':
transfer.cpp:14:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |  for(int i=1;i<=source.size();i++){
      |              ~^~~~~~~~~~~~~~~
transfer.cpp:13:6: warning: unused variable 'xor0' [-Wunused-variable]
   13 |  int xor0;
      |      ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...