#include "transfer.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;
std::vector<int> get_attachment(std::vector<int> source) {
//msg, bitinfo,
//hangilerinde sorun var? birden fazla varsa gg
//tam olarak birinde varsa ya (1<<problem) ya da problemxor sorunlu, todos'a göre
int ln = __lg(big(source)+1);
vi extras(ln,0);
int also = 0;
for (int i = 0;i<big(source);i++) {
also^=source[i];
for (int j = 0;j<ln;j++) {
if ((i+1)&(1<<j)) extras[j]^=source[i];
}
}
extras.push_back(also);
return extras;
}
std::vector<int> retrieve(std::vector<int> data) {
//n+lg(n)+1
int n,ln;
if (big(data) == 255+8+1) {
n = 255,ln = 8;
}else n = 63,ln = 6;
int shit = 0;
for (int i = 0;i<ln;i++) {
int trust = 0;
for (int j = 0;j<n;j++) {
if ((j+1)&(1<<i)) trust^=data[j];
}
if (trust != data[n+i]) shit|=(1<<i);
}
if (__builtin_popcountll(shit) >= 2) {
data[shit-1]^=1;
return vi(data.begin(),data.begin()+n);
}
else if (__builtin_popcountll(shit) == 1) {
int realpc = 0;
for (int i = 0;i<n;i++) realpc^=data[i];
if (realpc != data.back()) data[shit-1]^=1;
return vi(data.begin(),data.begin()+n);
}
else return vi(data.begin(),data.begin()+n);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |