Submission #829835

#TimeUsernameProblemLanguageResultExecution timeMemory
829835vqpahmadData Transfer (IOI19_transfer)C++14
88 / 100
255 ms2496 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define F first #define S second #define endl '\n' #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() const int mod = 1e9 + 7; const int N = 1e6 + 15; const ll inf = 1e18; #include "transfer.h" vector<int> get_attachment(vector<int> source) { int n = sz(source); vector<int> a(9); for (int i=1;i<=n;i++){ for (int b=0;b<8;b++){ if ((i>>b)&1) a[b] ^= source[i-1]; } } for (int i=0;i<8;i++){ a[8] ^= a[i]; } return a; } vector<int> retrieve(vector<int> data) { int n = sz(data)-9; int ans = 0; bool ok = 1; int cur = 0; for (int i=n;i<n+8;i++){ cur ^= data[i]; } ok &= data.back()==cur; vector<int> c(8); for (int i=1;i<=n;i++){ for (int b=0;b<8;b++){ if ((i>>b)&1) c[b] ^= data[i-1]; } } for (int i=n;i<n+8;i++){ if (data[i] != c[i-n]) ans |= (1<<(i-n)); } vector<int> fin_ans(n); if (ans==0 or !ok){ for (int i=0;i<n;i++){ fin_ans[i] = data[i]; } } else { for (int i=0;i<n;i++){ if (ans==i+1) fin_ans[i] = 1^data[i]; else fin_ans[i] = data[i]; } } return fin_ans; // if ans==0 or !ok print the orginal else orginal^ans }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...