#include<iostream>
#include<vector>
#include<algorithm>
#include "message.h"
using namespace std;
void send_message(std::vector<bool> M, std::vector<bool> C)
{
vector<bool>packet1,packet0;
vector<int>free;
for(int i=0;i<31;i++)
{
packet1.push_back(1);
packet0.push_back(0);
}
for(int i=0;i<31;i++)
{
int bit=C[i];
if(bit==1)send_packet(packet1);
else {free.push_back(i);send_packet(packet0);}
}
int sz=M.size();
vector<bool>packetsz;
packetsz.resize(31);
for(int i=0;i<16;i++)
{
int bit=0;
if((1<<i)&(sz)!=0)
{
bit=1;
}
packetsz[free[i]]=bit;
}
send_packet(packetsz);
for(int i=0;i<M.size();i+=16)
{
vector<bool>packet;
packet.resize(31);
for(int j=i;j<min((int)M.size(),i+16);j++)
{
packet[free[j-i]]=M[j];
}
send_packet(packet);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R)
{
vector<bool>ans;
vector<int>free;
for(int i=0;i<31;i++)
{
auto packet=R[i];
int cnt0=0,cnt1=0;
for(int i=0;i<31;i++)
{
if(packet[i]==0)cnt0++;
else cnt1++;
}
if(cnt0>cnt1)free.push_back(i);
}
int sz=0;
for(int i=0;i<16;i++)
{
if(R[31][free[i]])sz+=(1<<i);
}
for(int i=32;i<R.size();i++)
{
auto packet=R[i];
for(int i=0;i<16;i++)
{
if(ans.size()<sz)ans.push_back(packet[free[i]]);
}
}
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |