#include "message.h"
#include<bits/stdc++.h>
using namespace std;
void send_message(vector<bool> M, vector<bool> C) {
vector<bool> c(31, 1);
for (int i = 0;i < 16;i++) {
vector<bool> A(31, C[i]);
c[i] = C[i];
send_packet(A);
}
int now = 16;
while (now < 31) {
vector<bool> A(31, 0);
vector<bool> cc(c);
for (int i = 0;i < 31;i++) {
if (cc[i] == 0) {
c[now] = C[now];
A[i] = C[now++];
if (now >= 31) break;
}
}
send_packet(A);
}
int n = M.size();
{
vector<bool> A(31, 0);
int now = 0;
for (int j = 0;j < 31;j++) {
if (C[j] == 0) {
A[j] = (n >> now) & 1;
now++;
}
}
send_packet(A);
}
now = 0;
while (now < n) {
vector<bool> A(31, 0);
for (int j = 0;j < 31;j++) {
if (C[j] == 0) {
A[j] = M[now++];
if (now == n) break;
}
}
send_packet(A);
}
}
vector<bool> receive_message(vector<vector<bool>> R) {
vector<bool> ans;
vector<bool> C(31, 1);
for (int i = 0;i < 16;i++) {
int cnt0 = 0, cnt1 = 0;
for (bool x : R[i]) {
if (x) cnt1++;
else cnt0++;
}
C[i] = cnt1 > cnt0;
}
int idx = 16;
int now = 16;
while (now < 31) {
vector<bool> cc(C);
for (int i = 0;i < 31;i++) {
if (cc[i] == 0) {
C[now++] = R[idx][i];
if (now >= 31) break;
}
}
idx++;
}
int n = 0;
{
int now = 0;
for (int j = 0;j < 31;j++) {
if (C[j] == 0) {
n += R[idx][j] << now;
now++;
}
}
idx++;
}
for (int i = idx;i < (int)R.size();i++) {
for (int j = 0;j < 31;j++) {
if (C[j] == 0) {
ans.push_back(R[i][j]);
if ((int)ans.size() == n) break;
}
}
}
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... |