#include "message.h"
#include <bits/stdc++.h>
using namespace std;
void send_message(vector<bool> M, vector<bool> C)
{
int x = 0;
while (C[x]) x++;
for (int i = 0; i < 4; i++) send_packet(vector<bool>(31, x >> i & 1));
vector<bool> real;
for (int i = 0; i < 1025 - (int)M.size() - 1; i++) real.push_back(0);
real.push_back(1);
for (int i = 0; i < M.size(); i++) real.push_back(M[i]);
assert(real.size() == 1025);
for (int i = 0, j = 0; i < 1025; j++)
{
vector<bool> v(31, 0);
for (int k = 0; i < 1025 && k < 31; k++)
{
if (k == x || C[k] == 1) continue;
v[k] = real[i++];
}
if (j < 31) v[x] = C[j];
send_packet(v);
}
}
vector<bool> receive_message(vector<vector<bool>> R)
{
auto get = [](vector<bool> A)
{
int cnt = 0;
for (int i : A) cnt += i;
return cnt >= 16;
};
int x = 0;
for (int i = 0; i < 4; i++)
{
if (get(R[i])) x |= (1 << i);
}
vector<bool> res;
int C[31];
for (int i = 4; i < 4 + 31; i++) C[i - 4] = R[i][x];
for (int i = 4; i < R.size(); i++)
{
for (int j = 0; res.size() < 1025 && j < 31; j++)
{
if (j != x && C[j] == 0) res.push_back(R[i][j]);
}
}
vector<bool> real;
int i = 0;
while (res[i] == 0) i++;
for (i++; i < res.size(); i++) real.push_back(res[i]);
return real;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |