Submission #829611

#TimeUsernameProblemLanguageResultExecution timeMemory
829611BlagojData Transfer (IOI19_transfer)C++17
100 / 100
154 ms2496 KiB
#include <bits/stdc++.h> #include "transfer.h" // #include "grader.cpp" using namespace std; vector<int> get_attachment(vector<int> source) { int n = source.size(); vector<int> extra; for (int i = 0; i < (n == 63 ? 6 : 8); i++) { int sum = 0; for (int j = 1; j <= n; j++) { if (j & (1 << i)) { sum ^= source[j - 1]; } } extra.push_back(sum); } int last = 0; for (auto x : extra) last ^= x; extra.push_back(last); return {extra}; } vector<int> retrieve(vector<int> data) { vector<int> extra; for (int i = data.size() - 1; (i > 62 && i <= 70) || (i > 254 && i <= 300); i--) extra.push_back(data[i]); reverse(extra.begin(), extra.end()); int Xor = 0; for (int i = 0; i < extra.size() - 1; i++) Xor ^= extra[i]; int sz = extra.size(); while (sz--) data.pop_back(); if (Xor != extra.back()) return data; int num = 0; for (int i = 0; i < (data.size() == 63 ? 6 : 8); i++) { int sum = 0; for (int j = 1; j <= data.size(); j++) { if (j & (1 << i)) { sum ^= data[j - 1]; } } num |= (1 << i) * sum; } int cur = 0; for (int i = 0; i < extra.size() - 1; i++) cur |= (1 << i) * extra[i]; int pos = num ^ cur; if (pos != 0) data[pos - 1] = !data[pos - 1]; return data; }

Compilation message (stderr)

transfer.cpp: In function 'std::vector<int> retrieve(std::vector<int>)':
transfer.cpp:30:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for (int i = 0; i < extra.size() - 1; i++) Xor ^= extra[i];
      |                  ~~^~~~~~~~~~~~~~~~~~
transfer.cpp:37:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |   for (int j = 1; j <= data.size(); j++) {
      |                   ~~^~~~~~~~~~~~~~
transfer.cpp:45:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |  for (int i = 0; i < extra.size() - 1; i++) cur |= (1 << i) * extra[i];
      |                  ~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...