Submission #1191853

#TimeUsernameProblemLanguageResultExecution timeMemory
1191853ortsacData Transfer (IOI19_transfer)C++20
100 / 100
111 ms1728 KiB
#include <bits/stdc++.h> #include "transfer.h" using namespace std; vector<int> get_attachment(vector<int> source) { int n = source.size(); int B = 8; if (n == 63) B = 6; vector<int> ans(B); int sum = 0; for (int i = 0; i < B; i++) { for (int j = 1; j <= n; j++) { if ((j & (1 << i)) && source[j - 1]) ans[i]++; } ans[i] %= 2; sum += ans[i]; } sum %= 2; ans.push_back(sum); return ans; } vector<int> retrieve(vector<int> data) { int B = 8; if (((int) data.size()) == 70) B = 6; vector<int> ot; for (int i = 0; i <= B; i++) { ot.push_back(data.back()); data.pop_back(); } reverse(ot.begin(), ot.end()); int sum = 0; for (int i = 0; i < B; i++) sum = ((sum + ot[i])%2); if (sum != ot[B]) return data; int n = data.size(); int ans = 0; for (int i = 0; i < B; i++) { int curr = 0; for (int j = 1; j <= n; j++) { if ((j & (1 << i)) && data[j - 1]) curr++; } curr %= 2; if (curr != ot[i]) ans += (1 << i); } if (ans == 0) return data; data[ans - 1] = (1 - data[ans - 1]); return data; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...