#include <bits/stdc++.h>
std::vector<bool> send_packet(std::vector<bool> A);
void send_message(std::vector<bool> M, std::vector<bool> C) {
auto send = [&](const std::string &s) {
std::vector<bool> a(s.length());
for (int i = 0; i < s.length(); ++i) {
a[i] = s[i] == '1';
}
send_packet(a);
};
auto send_num = [&](int n) {
std::string msg(31, '0');
for (int i = 0, j = 0; i < 16; ++i, ++j) {
while (C[j]) {
j++;
}
msg[j] = !!(n & 1 << i) + '0';
}
send(msg);
};
for (bool i : C) {
send(std::string(31, i + '0'));
}
send_num(M.size());
for (int i = 0; i < M.size(); i += 16) {
int x = 0;
for (int j = 0; j < 16 and i + j < M.size(); ++j) {
x += int(M[i + j]) << j;
}
send_num(x);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
auto recv = [&](std::vector<bool> P) {
int o = 0, z = 0;
for (bool i : P) {
o += i, z += !i;
}
return o > z;
};
std::vector<bool> C(31);
int cur = 0;
for (int i = 0; i < 31; ++i) {
C[i] = recv(R[cur++]);
}
auto recv_num = [&](std::vector<bool> P) {
int ans = 0;
for (int i = 0, j = 0; i < 16; ++i, ++j) {
while (C[j]) {
j++;
}
ans += int(P[j]) << i;
}
return ans;
};
int size = recv_num(R[cur++]);
std::vector<bool> M(size);
for (int i = 0; i < size; i += 16) {
int x = recv_num(R[cur++]);
for (int j = 0; j < 16 and i + j < size; ++j) {
M[i + j] = x & 1 << j;
}
}
return M;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |