| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1344635 | killerzaluu | Data Transfer (IOI19_transfer) | C++20 | 69 ms | 1724 KiB |
#include <bits/stdc++.h>
using namespace std;
int find_n_from_total(int m) {
for (int s = 1; 2 * s <= m; s++) {
int n = m - 2 * s;
if (n < 0) continue;
int t = 1;
while (t * t < n) t++;
if (t == s) return n;
}
return -1;
}
vector<int> get_attachment(vector<int> source) {
int n = source.size();
int s = 1;
while (s * s < n) s++;
vector<int> row(s, 0), col(s, 0);
for (int i = 0; i < n; i++) {
int r = i / s;
int c = i % s;
row[r] ^= source[i];
col[c] ^= source[i];
}
vector<int> ans;
for (int i = 0; i < s; i++) ans.push_back(row[i]);
for (int i = 0; i < s; i++) ans.push_back(col[i]);
return ans;
}
vector<int> retrieve(vector<int> data) {
int m = data.size();
int n = find_n_from_total(m);
int s = 1;
while (s * s < n) s++;
vector<int> row(s, 0), col(s, 0);
for (int i = 0; i < n; i++) {
int r = i / s;
int c = i % s;
row[r] ^= data[i];
col[c] ^= data[i];
}
int badr = -1, badc = -1;
int cnt = 0;
for (int i = 0; i < s; i++) {
if (row[i] != data[n + i]) {
badr = i;
cnt++;
}
}
for (int i = 0; i < s; i++) {
if (col[i] != data[n + s + i]) {
badc = i;
cnt++;
}
}
vector<int> ans;
for (int i = 0; i < n; i++) ans.push_back(data[i]);
if (cnt == 2 && badr != -1 && badc != -1) {
int pos = badr * s + badc;
if (pos < n) ans[pos] ^= 1;
}
return ans;
}Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
