#include "message.h"
#include<bits/stdc++.h>
using namespace std;
int calc(vector<bool> c, int p) {
if(c[p] == 1) {
return INT_MAX;
}
vector<bool> d(0);
for(int i = p; i < 31; i++) {
d.push_back(c[i]);
}
for(int i = 0; i < p; i++) {
d.push_back(c[i]);
}
int br = 0,y = 1;
while(y < 31) {
br++;
int sb = 0;
for(int i = 0; i < y; i++) {
if(d[i] == 0) {
sb++;
}
}
br++;
y+=sb;
}
return br;
}
void send_message(std::vector<bool> m, std::vector<bool> c) {
int sm = INT_MAX,p = -1;
for(int i = 0; i < 31; i++) {
int x = calc(c,i);
if(x < sm) {
sm = x;
p = i;
}
}
for(int i = 0; i < 5; i++) {
vector<bool> wut(31);
if((1 << i)&p) {
for(int j = 0; j < 31; j++) {
wut[j] = 1;
}
}
send_packet(wut);
}
int y = 1;
while(y < 31) {
int x = p+y,br = 0;
vector<bool> wut(31);
for(int i = p; i < p+y; i++) {
if(c[i] == 0) {
br++;
wut[i] = c[x%31];
x++;
}
}
send_packet(wut);
y+=br;
}
for(int i = 0; i < (m.size()+15)/16; i++) {
int y = i*16;
vector<bool> wut(31);
for(int j = 0; j < 31; j++) {
if(c[j] == 0 && y < m.size()) {
wut[j] = m[y];
y++;
}
}
send_packet(wut);
}
y = 0;
vector<bool> wut(31);
for(int i = 0; i < 31; i++) {
if(c[i] == 0 && y < 4 && (((1 << y)&((int)m.size())) > 0)) {
wut[i] = 1;
y++;
}
else if(c[i] == 0) {
y++;
}
}
send_packet(wut);
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> r) {
int p = 0;
for(int i = 0; i < 5; i++) {
int br = 0;
for(int j = 0; j < 31; j++) {
if(r[i][j]) {
br++;
}
}
if(br >= 16) {
p+=(1 << i);
}
}
int y = 1;
int x = 5;
vector<bool> wow(1,false);
while(wow.size() < 31) {
y = wow.size();
for(int j = 0; j < y; j++) {
if(wow[j] == false) {
wow.push_back(r[x][(j+p)%31]);
}
}
x++;
}
vector<bool> c(31);
for(int i = 0; i < 31; i++) {
c[i] = wow[(i+p)%31];
}
vector<bool> m(0);
for(int i = x; i < r.size()-1; i++) {
for(int j = 0; j < 31; j++) {
if(c[j] == 0) {
m.push_back(r[i][j]);
}
}
}
int z = 0;
y = 0;
for(int i = 0; i < 31; i++) {
if(c[i] == 0 && y < 4) {
if(r[r.size()-1][i]) {
z+=(1 << y);
}
y++;
}
}
while(m.size()%16 != z) {
m.pop_back();
}
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... |