Submission #1308927

#TimeUsernameProblemLanguageResultExecution timeMemory
1308927ojuz_userData Transfer (IOI19_transfer)C++20
0 / 100
4 ms1720 KiB
#include "transfer.h" #include <bits/stdc++.h> using namespace std; // Tìm vector chọn (k bit) sao cho XOR các (n+j) với bit=1 bằng target static vector<int> subset_xor_positions(int n, int k, int target) { vector<int> a(k); for (int j = 0; j < k; j++) a[j] = n + j; // Gaussian elimination trên GF(2) cho số nguyên (bitset 32-bit là đủ) vector<int> basis(32, 0); vector<int> who(32, 0); // mask trên k phần tử tạo ra basis[b] for (int j = 0; j < k; j++) { int v = a[j]; int mask = (1 << j); for (int b = 31; b >= 0; b--) { if (((v >> b) & 1) == 0) continue; if (!basis[b]) { basis[b] = v; who[b] = mask; break; } v ^= basis[b]; mask ^= who[b]; } } int v = target; int mask = 0; for (int b = 31; b >= 0; b--) { if (((v >> b) & 1) == 0) continue; // Với (63,7) và (255,9) thì luôn biểu diễn được v ^= basis[b]; mask ^= who[b]; } vector<int> sel(k, 0); for (int j = 0; j < k; j++) sel[j] = (mask >> j) & 1; return sel; } vector<int> get_attachment(vector<int> source) { int n = (int)source.size(); int k = (n == 63 ? 7 : 9); int X = 0; for (int i = 0; i < n; i++) if (source[i]) X ^= i; // cần XOR(indices của attachment-bit-1) = X để XOR toàn bộ = 0 return subset_xor_positions(n, k, X); } vector<int> retrieve(vector<int> data) { int N = (int)data.size(); int k = (N == 70 ? 7 : 9); int n = N - k; int p = 0; for (int i = 0; i < N; i++) if (data[i]) p ^= i; if (p != 0) { if (p < n) data[p] ^= 1; // lỗi nằm trong source // p >= n: lỗi nằm trong attachment => source ok, khỏi sửa } data.resize(n); return data; }

Compilation message (stderr)

grader.cpp: In instantiation of 'void shuffle(std::vector<T>&) [with T = Scenario]':
grader.cpp:200:10:   required from here
grader.cpp:28:23: warning: 'void std::random_shuffle(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<Scenario*, vector<Scenario> >]' is deprecated: use 'std::shuffle' instead [-Wdeprecated-declarations]
   28 |         random_shuffle(v.begin(), v.end());
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61,
                 from grader.cpp:8:
/usr/include/c++/13/bits/stl_algo.h:4581:5: note: declared here
 4581 |     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
      |     ^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...