Submission #1276161

#TimeUsernameProblemLanguageResultExecution timeMemory
1276161AvianshData Transfer (IOI19_transfer)C++20
100 / 100
46 ms1732 KiB
#include "transfer.h"

#include <bits/stdc++.h>

using namespace std;

vector<int> get_attachment(vector<int> source) {
    int n = source.size();
    int x = 0;
    for(int i = 0;i<n;i++){
        if(source[i]){
            x^=(i+1);
        }
    }
    vector<int>v;
    while(x){
        v.push_back(x%2);
        x/=2;
    }
    int siz = 7;
    if(n==255){
        siz=9;
    }
    while(v.size()!=siz-1){
        v.push_back(0);
    }
    reverse(v.begin(),v.end());
    x=0;
    for(int i : v){
        x^=i;
    }
    v.push_back(x);
    return v;
}

vector<int> retrieve(vector<int> data) {
    int n = data.size();
    if(n==63+7){
        //sub 1
        vector<int>ans(63);
        for(int i = 0;i<63;i++){
            ans[i]=data[i];
        }
        int x = 0;
        for(int i = 0;i<63;i++){
            if(data[i]){
                x^=(i+1);
            }
        }
        int reqx = 0;
        for(int i = 0;i<6;i++){
            if(data[n-i-2]){
                reqx+=(1<<i);
            }
        }
        if(x==reqx){
            //nice no corruption
            return ans;
        }
        int m = 0;
        for(int i = 0;i<7;i++){
            if((1<<i)&reqx){
                m++;
            }
        }
        m%=2;
        if(m!=data[n-1]){
            return ans;
        }
        for(int i = 0;i<63;i++){
            if((x^(i+1))==reqx){
                if(ans[i]){
                    ans[i]=0;
                }
                else{
                    ans[i]=1;
                }
                return ans;
            }
        }
        assert(0);
    }
    if(n==255+9){
        //sub 1
        vector<int>ans(255);
        for(int i = 0;i<255;i++){
            ans[i]=data[i];
        }
        int x = 0;
        for(int i = 0;i<255;i++){
            if(data[i]){
                x^=(i+1);
            }
        }
        int reqx = 0;
        for(int i = 0;i<8;i++){
            if(data[n-i-2]){
                reqx+=(1<<i);
            }
        }
        if(x==reqx){
            //nice no corruption
            return ans;
        }
        int m = 0;
        for(int i = 0;i<8;i++){
            if((1<<i)&reqx){
                m++;
            }
        }
        m%=2;
        if(m!=data[n-1]){
            return ans;
        }
        for(int i = 0;i<255;i++){
            if((x^(i+1))==reqx){
                if(ans[i]){
                    ans[i]=0;
                }
                else{
                    ans[i]=1;
                }
                return ans;
            }
        }
        assert(0);
    }
    assert(0);
}

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...