Submission #1229335

#TimeUsernameProblemLanguageResultExecution timeMemory
1229335dostsData Transfer (IOI19_transfer)C++20
0 / 100
5 ms1724 KiB
#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)); 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...