#include "message.h"
#include <bits/stdc++.h>
using namespace std;
#define bug(x) cout << #x << " " << x << endl;
const int n = 31;
const int logm = 11;
vector<bool> encode( int x, int tam ){
vector<bool> v(tam);
for( int i = 0; i < tam; i++ ) if( x&(1<<i) ) v[i] = true;
return v;
}
void init( int x ){
vector<bool> v = encode( x, 5 );
for( int i = 0; i < v.size(); i++ ){
vector<bool> aux(n, v[i]);
send_packet(aux);
}
}
void send_message( vector<bool> m, vector<bool> c ){
int id1;
for( int i = 0; i < n; i++ ) if( !c[i] ) id1 = i;
init( id1 );
vector<vector<bool>> mat;
int cont_cleo = 0;
for( int i = 0; i < n && cont_cleo < 15 && i - cont_cleo < 16; i++ ){
mat.push_back(vector<bool>(n));
if( c[i] ) cont_cleo++;
mat[i][id1] = c[i];
}
int iniciais = mat.size();
vector<bool> message = encode( m.size(), logm );
for( auto x : m ) message.push_back(x);
int p = 0, linha = 0;
while( p < message.size() ){
if( linha == mat.size() ) mat.push_back(vector<bool>(n));
for( int i = 0; i < n; i++ ) if( !c[i] && p < message.size() && !(i == id1 && linha < iniciais ) ) mat[linha][i] = message[p++];
linha++;
}
for( auto &v : mat ) send_packet(v);
}
int decode( vector<vector<bool>> &mat ){
int x = 0;
for( int i = 0; i < 5; i++ ){
vector<int> cont(2);
for( auto x : mat[i] ) cont[(int)x]++;
if( cont[1] > cont[0] ) x += (1<<i);
}
return x;
}
vector<bool> receive_message( vector<vector<bool>> mat ){
int id1 = decode(mat);
vector<int> c(n);
int cont_cleo = 0;
int cur = 5;
for( cur = 5; cur < n + 5 && cont_cleo < 15 && cur - 5 - cont_cleo < 16; cur++ ){
c[cur - 5] = mat[cur][id1];
if( c[cur - 5] ) cont_cleo++;
}
int iniciais = cur;
if( cont_cleo < 15 ) for( int i = cur - 5; i < n; i++ ) c[i] = true;
vector<bool> message;
for( int linha = 5; linha < mat.size(); linha++ ){
for( int i = 0; i < n; i++ ) if( !c[i] && !(i == id1 && linha < iniciais ) ) message.push_back(mat[linha][i]);
}
int qtd = 0;
int p = 0;
while( p < logm ){
qtd += (message[p]<<p);
p++;
}
vector<bool> resp;
for( int i = logm; i < logm + qtd; i++ ) resp.push_back(message[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... |