Submission #1265288

#TimeUsernameProblemLanguageResultExecution timeMemory
1265288FernandoJC07Data Transfer (IOI19_transfer)C++20
100 / 100
60 ms1728 KiB
#include <bits/stdc++.h>
#include "transfer.h"
#define vi vector<int>
#define vii vector<vi>
#define pb push_back
#define ff first
#define ss second
#define pii pair<int, int>
#define vpii vector<pii>
#define forn(i, n) for(int i = 0; i<n; ++i)
#define For(i, a, n) for(int i = a; i<n; ++i)
using namespace std;

vi get_attachment(vi source){
    int N = source.size();
    int xr = 0, s = 0;
    For(i, 1, N+1){ xr ^= source[i-1]*i; s+=source[i-1];}
    //cout<<xr<<endl;
    vi ans;
    int l = log2(N);
    forn(i, l+1) {xr&(1<<i) ?  ans.pb(1) : ans.pb(0);}
    //mos(ans);
    ans.pb(s%2);
    return ans;
}

vi retrieve(vi data){
    int N;
    data.size()>255 ? N=255 : N=63;
    int xr = 0, s = 0;
    vi ans;
    For(i, 1, N+1) { xr ^= data[i-1]*i; s+=data[i-1]; ans.pb(data[i-1]);}
    int k = 0;
    For(i, N, data.size()-1) k += (data[i]<<(i-N));
    int puta = k^xr;
    if(puta==0) return ans;
    if(s%2 == data[data.size()-1]) return ans;
    ans[puta-1] ^= 1;
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...