Submission #1198294

#TimeUsernameProblemLanguageResultExecution timeMemory
1198294a.pendovData Transfer (IOI19_transfer)C++20
100 / 100
76 ms1728 KiB
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;

std::vector<int> get_attachment(std::vector<int> source)
{
    int K,N=source.size(),ans=0,br=0;
    vector<int> ansV;

    //K=3;

    //if(false)
    if(N==63)K=6;
    else K=8;

    for(int i=0;i<N;i++)
    {
        if(source[i])ans^=(i+1);
    }

    for(int i=0;i<K;i++)
    {
        if(ans&(1LL<<i))
        {
            ansV.push_back(1);
            br++;
        }
        else
        {
            ansV.push_back(0);
        }
    }
    ansV.push_back(br%2);
    //for(auto i:ansV)cout<<i;
    //cout<<endl;
    return ansV;
}

std::vector<int> retrieve(std::vector<int> data)
{
    int N,K,br=0,ans=0;
    vector<int> ansV;
    //cout<<"   ";
    //for(auto i:data)cout<<i;
    //cout<<endl;

    //N=7;
    //K=3;

    //if(false)
    if(data.size()==70)
    {
        N=63;
        K=6;
    }
    else
    {
        N=255;
        K=8;
    }

    for(int i=N;i<N+K;i++)br+=data[i];
    if(br%2!=data[N+K])
    {
        for(int i=0;i<N;i++)ansV.push_back(data[i]);
        return ansV;
    }

    for(int i=N;i<N+K;i++)
    {
        ans+=data[i]*(1LL<<(i-N));
    }
    //cout<<ans<<endl;
    for(int i=0;i<N;i++)
    {
        if(data[i])ans^=(i+1);
    }

    if(ans!=0)
    {
        data[ans-1]=1-data[ans-1];
    }


    for(int i=0;i<N;i++)ansV.push_back(data[i]);
    return ansV;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...