#include "message.h"
using namespace std;
void send_message(vector<bool> m, vector<bool> c)
{
int M = m.size();
while (m.size() < 1024)
m.push_back(false);
int n = c.size();
vector<int> poznani;
for (int i = 0; i < n; i++)
if (c[i] == 0)
poznani.push_back(i);
vector<bool> a(n, false);
for (int j = 0; j < 4; j++)
{
if (poznani[0]>>j&1)
a = vector<bool>(n, true);
else
a = vector<bool>(n, false);
send_packet(a);
}
int ix = poznani[0]+1;
for (int i = 0; i < 1024;)
{
if (ix < 31)
{
for (int j = 0; j < 15; j++)
a[poznani[j+1]] = m[j+i];
a[poznani[0]] = !c[ix];
ix++;
i+=15;
}
else
{
for (int j = 0; j < 16; j++)
a[poznani[j]] = m[j+i];
i+=16;
}
send_packet(a);
}
a = vector<bool>(n, false);
for (int j = 0; j < 16; j++)
if (M>>j&1)
a[poznani[j]] = true;
send_packet(a);
}
vector<bool> receive_message(vector<vector<bool>> r)
{
int prvi_ix = 0;
for (int i = 0; i < 4; i++)
{
int stb = 0;
for (bool v : r[i])
stb += (v ? 1 : 0);
if (stb >= 16)
prvi_ix += (1 << i);
}
vector<int> poznani;
poznani.push_back(prvi_ix);
int ix = poznani[0]+1;
for (int i = 4; ix < 31; i++)
{
if (r[i][poznani[0]])
poznani.push_back(ix);
ix++;
}
ix = poznani[0]+1;
vector<bool> message;
for (int i = 4; i < r.size()-1; i++)
{
if (ix < 31)
{
for (int j = 0; j < 15; j++)
message.push_back(r[i][poznani[j+1]]);
ix++;
}
else
{
for (int j = 0; j < 16; j++)
message.push_back(r[i][poznani[j]]);
}
}
int M = 0;
for (int j = 0; j < 16; j++)
if (r.back()[poznani[j]])
M += (1 << j);
vector<bool> rez;
for (int i = 0; i < M; i++)
rez.push_back(message[i]);
return rez;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |