#include "message.h"
#include <bits/stdc++.h>
using namespace std;
const int n = 31;
const int logm = 11;
vector<bool> encode( int x ){
vector<bool> v(logm);
for( int i = 0; i < logm; i++ ) if( x&(1<<i) ) v[i] = true;
return v;
}
void send_message( vector<bool> m, vector<bool> c ){
int cont_cleo = 0;
for( int i = 0; i < n && cont_cleo < 15 && i - cont_cleo < 16; i++ ){
if( c[i] ) cont_cleo++;
vector<bool> v(n, c[i]);
send_packet(v);
}
vector<bool> num = encode(m.size());
vector<bool> qtd(n);
for( int i = 0; i < n; i++ ) if( !c[i] && !num.empty() ){ qtd[i] = num.back(); num.pop_back(); }
send_packet(qtd);
int p = 0;
while( p < m.size() ){
vector<bool> v(n);
for( int i = 0; i < n; i++ ) if( !c[i] && p < m.size() ) v[i] = m[p++];
send_packet(v);
}
}
vector<bool> receive_message( vector<vector<bool>> mat ){
vector<int> c(n);
int cont_cleo = 0;
int cur = 0;
for( cur = 0; cur < n && cont_cleo < 15 && cur - cont_cleo < 16; cur++ ){
vector<int> cont(2);
for( auto x : mat[cur] ) cont[(int)x]++;
c[cur] = ((cont[1] > cont[0]) ? true : false );
if( c[cur] ) cont_cleo++;
}
if( cont_cleo < 15 ) for( int i = cur; i < n; i++ ) c[i] = true;
int qtd = 0, cont = 0;
for( int i = 0; i < n; i++ ) if( !c[i] && cont < logm ){
cont++;
qtd = (qtd<<1) + (int)mat[cur][i];
}
vector<bool> resp;
while( ++cur < mat.size() ){
for( int i = 0; i < n; i++ ) if( !c[i] && resp.size() < qtd ) resp.push_back(mat[cur][i]);
}
return resp;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |