| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1310831 | putuputu | Data Transfer (IOI19_transfer) | C++20 | 7 ms | 3252 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;
}
}
int b=0;
int cnt=0;
for(int i=0; i<(int)bit.size(); i++){
if(bit[i]==data[63+i]){
b++;
if(data[63+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;
}
}
int b=0;
int cnt=0;
for(int i=0; i<(int)bit.size(); i++){
if(bit[i]==data[255+i]){
b++;
if(data[255+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)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
