#include <bits/stdc++.h>
#include "message.h"
using namespace std;
typedef long long ll;
void send_message(std::vector<bool> M, std::vector<bool> C) {
for (int i = 0; i < 31; i++) C[i] = !C[i];
vector<bool> A(31, false), B(31, true);
for (int i = 0; i < 31; i++) {
if (C[i] == false) send_packet(A);
else { send_packet(B); break; }
}
ll idx = 0, aux_idx = 0;
while (C[idx] == false) idx++;
aux_idx = idx + 1;
while (idx < 30) {
A = vector<bool> (31, false);
for (int i = 0; i <= idx; i++)
if (C[i]) if (aux_idx < 31) A[i] = C[aux_idx++];
idx = aux_idx - 1;
send_packet(A);
}
A = vector<bool> (31, false);
ll SZ = M.size();
for (int i = 0; i < 31; i++) {
if (C[i]) {
A[i] = ((SZ%2 == 0) ? false : true);
SZ /= 2;
}
send_packet(A);
}
idx = 0;
while (idx < M.size()) {
A = vector<bool> (31, false);
for (int i = 0; i < 31; i++)
if (C[i]) A[i] = M[idx++];
send_packet(A);
}
return;
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
vector<bool> C(31, false), V;
ll idx = 0, SZ = 0;
for (auto &it : R) {
ll cnt = 0;
for (int i = 0; i < 31; i++) {
if (it[i]) cnt++;
if (C[i]) V.push_back(it[i]);
}
if (idx < 31) {
if (V.empty()) C[idx++] = ((cnt > 15) ? true : false);
else for (int i = 0; i < V.size(); i++) if (idx < 31) C[idx++] = V[i];
V.clear();
}
if (idx == 31) {
ll aux = 1;
for (int i = 0; i < V.size(); i++) {
SZ += aux*(V[i] == true ? 1 : 0);
aux *= 2;
}
V.clear();
idx++;
}
}
while (V.size() > SZ) V.pop_back();
return V;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |