Submission #1287967

#TimeUsernameProblemLanguageResultExecution timeMemory
1287967khoavn2008Data Transfer (IOI19_transfer)C++17
0 / 100
9 ms3252 KiB
#include <bits/stdc++.h>
#ifndef KHOA
#include "transfer.h"
#endif // KHOA
using namespace std;
#define ll long long
#define ld double
#define FOR(i,l,r) for(int i = (l), _r = (r); i <= _r; i++)
#define FORNG(i,r,l) for(int i = (r), _l = (l); i >= _l; i--)
#define REP(i,r) for(int i = 0, _r = (r); i < _r; i++)
#define endl '\n'
#define fi first
#define se second
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define size(v) ((ll)(v).size())
#define MASK(x) (1LL << (x))
#define BIT(x, i) (((x) >> (i)) & 1)

const ll MOD = 1e9 + 7, N = 3e5 + 10, INF = 2e18, LOG = 21;

//63 255
vector<int> get_attachment(vector<int> source) {
    int x = 0;
    int o = 0;
    REP(i,size(source))if(source[i]){
        x ^= i + 1;
        o ^= 1;
    }
    if(size(source) == 63){
        source.pb(o);
        FORNG(i,5,0)source.pb(BIT(x, i));
    }else{
        source.pb(o);
        FORNG(i,7,0)source.pb(BIT(x, i));
    }
    return source;
}

vector<int> retrieve(vector<int> data) {
	vector<int> res;
	if(size(data) == 63 + 7){
        int x = 0, curx = 0;
        int o = data[63], curo = 0;
        REP(i,63)if(data[i])curx ^= i + 1,curo^=1;
        FOR(i,64,size(data) - 1)x = x * 2 + data[i];
        if(o == curo){
            while(size(data) > 63)data.pop_back();
            res = data;
        }else{
            if(x == curx){
                while(size(data) > 63)data.pop_back();
                res = data;
            }else{
                data[x ^ curx - 1] ^= 1;
                while(size(data) > 63)data.pop_back();
                res = data;
            }
        }
	}else{
        int x = 0, curx = 0;
        int o = data[255], curo = 0;
        REP(i,255)if(data[i])curx ^= i + 1,curo^=1;
        FOR(i,255 + 1,size(data) - 1)x = x * 2 + data[i];
        if(o == curo){
            while(size(data) > 255)data.pop_back();
            res = data;
        }else{
            if(x == curx){
                while(size(data) > 255)data.pop_back();
                res = data;
            }else{
                data[x ^ curx - 1] ^= 1;
                while(size(data) > 255)data.pop_back();
                res = data;
            }
        }
    }
	return res;
}

#ifdef KHOA
int main(){
    mt19937 rd(time(0));
    int n = 63;
    vector<int> a;
    REP(i,n)a.pb(rd() % 2);
    REP(i,n)cout<<a[i];
    cout<<endl;

    vector<int> d = get_attachment(a);
    if(rd() % 2)d[rd() % size(d)] ^= 1;
    REP(i,size(d))cout<<d[i];
    cout<<endl;

    vector<int> r = retrieve(d);
    REP(i,size(r))cout<<r[i];
}
#endif // KHOA

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