Submission #1251796

#TimeUsernameProblemLanguageResultExecution timeMemory
1251796denislavData Transfer (IOI19_transfer)C++20
60 / 100
5 ms1724 KiB
# include <iostream>
# include <vector>
using namespace std;
# include "transfer.h"
//# include "grader.cpp"

const int n=63,LOG=6;

std::vector<int> get_attachment(std::vector<int> source)
{
    for(int i=0;i<=LOG;i++) source.push_back(0);
    for(int j=0;j<LOG;j++)
    {
        for(int i=1;i<=n;i++)
        {
            if((i&(1<<j))>0) source[n+j]^=source[i-1];
        }
    }
    for(int i=0;i<n;i++) source[n+LOG]^=source[i];

    vector<int> data;
    for(int i=0;i<=LOG;i++) data.push_back(source[n+i]);

    return data;
}

std::vector<int> retrieve(std::vector<int> data)
{
    vector<int> ans;
    for(int i=0;i<n;i++) ans.push_back(data[i]);

    int all=0;
    for(int i=0;i<n;i++) all^=data[i];
    if(all==data[n+LOG]) return ans;

    int corr=0;
    for(int j=0;j<LOG;j++)
    {
        int x=0;
        for(int i=1;i<=n;i++)
        {
            if((i&(1<<j))>0) x^=data[i-1];
        }
        if(x!=data[n+j]) corr|=(1<<j);
    }

    //cout<<corr<<"\n";

    if(corr==0) return ans;
    else
    {
        ans[corr-1]^=1;
        return ans;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...