Submission #1310851

#TimeUsernameProblemLanguageResultExecution timeMemory
1310851putuputuData Transfer (IOI19_transfer)C++20
0 / 100
7 ms3252 KiB
#include "transfer.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source) {
	int xr=0;
	int cnt=0;
	for(int i=0; i<(int)source.size(); i++){
		if(source[i]==1){
			xr^=(i+1);
		}
	}
	vector<int>bit;
	while(xr>0){
		if(xr%2==1){
			bit.push_back(1);
			xr=(xr-1)/2;
		}else{
			bit.push_back(0);
			xr/=2;
		}
	}
	reverse(bit.begin(), bit.end());
	for(int i=0; i<(int)bit.size(); i++){
		if(bit[i]==1){
			cnt++;
		}
	}
	vector<int> ans=source;
	for(int i=0; i<(int)bit.size(); i++){
		ans.push_back(bit[i]);
	}
	ans.push_back(cnt%2);
	return ans;
}

vector<int> retrieve(vector<int> data) {
	int xr=0;
	vector<int> ans;
	if(data.size()<255){
		for(int i=0; i<63; i++){
			if(data[i]==1){
				xr^=(i+1);
			}
		}	
		int xr1=xr;
		vector<int>bit;
		while(xr>0){
			if(xr%2==1){
				bit.push_back(1);
				xr=(xr-1)/2;
			}else{
				bit.push_back(0);
				xr/=2;
			}
		}
		reverse(bit.begin(), bit.end());
		int b=0;
		int cnt=0;
		for(int i=0; i<(int)bit.size(); i++){
			if(bit[i]==data[63+i]){
				b++;
				if(bit[i]==1){
					cnt++;
				}
			}
		}
		if(b==bit.size()){
			for(int i=0; i<63; i++){
				ans.push_back(data[i]);
			}
		}else if(cnt%2==data[data.size()-1]){
			int xr2=0;
			for(int i=0; i<(int)bit.size(); i++){
				if(data[63+i]==1){
					xr2+=(1LL<<(i+1));
				}
			}
			int idx=xr1^xr2;
			for(int i=0; i<63; i++){
				if(i==idx-1){
					if(data[i]==1){
						ans.push_back(0);
					}else{
						ans.push_back(1);
					}
				}else{
					ans.push_back(data[i]);
				}
			}
		}else{
			for(int i=0; i<63; i++){
				ans.push_back(data[i]);
			}
		}
	}else{
		for(int i=0; i<255; i++){
			if(data[i]==1){
				xr^=(i+1);
			}
		}
		int xr1=xr;
		vector<int>bit;
		while(xr>0){
			if(xr%2==1){
				bit.push_back(1);
				xr=(xr-1)/2;
			}else{
				bit.push_back(0);
				xr/=2;
			}
		}
		reverse(bit.begin(), bit.end());
		int b=0;
		int cnt=0;
		for(int i=0; i<(int)bit.size(); i++){
			if(bit[i]==data[255+i]){
				b++;
				if(bit[i]==1){
					cnt++;
				}
			}
		}
		if(b==bit.size()){
			for(int i=0; i<255; i++){
				ans.push_back(data[i]);
			}
		}else if(cnt%2==data[data.size()-1]){
			int xr2=0;
			for(int i=0; i<(int)bit.size(); i++){
				if(data[255+i]==1){
					xr2+=(1LL<<(i+1));
				}
			}
			int idx=xr1^xr2;
			for(int i=0; i<255; i++){
				if(i==idx-1){
					if(data[i]==1){
						ans.push_back(0);
					}else{
						ans.push_back(1);
					}
				}else{
					ans.push_back(data[i]);
				}
			}
		}else{
			for(int i=0; i<255; i++){
				ans.push_back(data[i]);
			}
		}
	}
	return ans;
}

Compilation message (stderr)

grader.cpp: In instantiation of 'void shuffle(std::vector<T>&) [with T = Scenario]':
grader.cpp:200:10:   required from here
grader.cpp:28:23: warning: 'void std::random_shuffle(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<Scenario*, vector<Scenario> >]' is deprecated: use 'std::shuffle' instead [-Wdeprecated-declarations]
   28 |         random_shuffle(v.begin(), v.end());
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61,
                 from grader.cpp:8:
/usr/include/c++/13/bits/stl_algo.h:4581:5: note: declared here
 4581 |     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
      |     ^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...