#include "message.h"
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
void send_message(std::vector<bool> M, std::vector<bool> C) {
for(auto a:C){
vector<bool>v;
for(int i=0;i<31;i++)v.pb(a);
send_packet(v);
}
vector<int>idx;
for(int i=0;i<31;i++){
if(C[i]==0)idx.pb(i);
}
int L=M.size();
vector<bool>tmp(31);
for(int i=0;i<15;i++){
if(L & (1<<i)){
tmp[idx[i]]=1;
}
}
send_packet(tmp);
for(int i=0;i<L/16;i++){
vector<bool>v(31);
for(int j=0;j<16;j++){
v[idx[j]]=M[i*16+j];
}
send_packet(v);
}
if(L%16){
vector<bool>v(31);
for(int j=0;j<L%16;j++){
v[idx[j]]=M[L-L%16+j];
}
send_packet(v);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
vector<bool>C;
for(int i=0;i<31;i++){
vector<bool>v=R[i]; int s=0;
for(auto a:v)s+=a;
if(s>=16)C.pb(1);
else C.pb(0);
}
vector<int>idx;
for(int i=0;i<31;i++)if(C[i]==0)idx.pb(i);
int L=0;
for(int i=0;i<15;i++){
if(R[31][idx[i]])L+=(1<<i);
}
vector<bool>M(L);
for(int i=0;i<L/16;i++){
vector<bool>v(31);
for(int j=0;j<16;j++){
M[i*16+j]=R[i+32][idx[j]];
}
}
if(L%16){
vector<bool>v(31);
for(int j=0;j<L%16;j++){
M[L-L%16+j]=R.back()[idx[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... |