#include "message.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
void send_message(std::vector<bool> M, std::vector<bool> C) {
std::vector<bool> A(31, 0);
vi clean;
for (int i = 0;i<31;i++) if (!C[i]) clean.push_back(i);
int fbit = clean[0];
for (int i = 0;i<4;i++) send_packet(vector<bool>(31,!!(fbit&(1<<i))));
int ptr = 0;
int nxt = 0;
for (int i = 0;i<30;i++) {
if (nxt == fbit) nxt++;
vector<bool> A(31,0);
for (int j = 1;j<16;j++) A[clean[j]] = M[ptr++];
A[fbit] = C[nxt++];
send_packet(A);
}
int S = big(M);
vector<bool> szpack(31,0);
for (int i = 0;i<big(clean);i++) {
szpack[clean[i]] = !!(S&(1<<i));
}
send_packet(szpack);
for (int i = 0;ptr < S;i++) {
vector<bool> A(31,0);
for (int j = 0;j<16 && ptr < S;j++) {
A[clean[j]] = M[ptr++];
}
send_packet(A);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
int fbit = 0;
int cur = 0;
for (int i = 0;i<4;i++) {
int o = 0,z = 0;
for (auto it : R[cur]) {
if (it) o++;
else z++;
}
if (o > z) fbit+=1<<i;
cur++;
}
int nxt = 0;
vi clean{fbit};
for (int i = 0;i<30;i++) {
if (nxt == fbit) nxt++;
if (!R[cur+i][fbit]) clean.push_back(nxt);
nxt++;
}
int s = 0;
for (int i = 0;i<big(clean);i++) {
if (R[cur+30][clean[i]]) s+=(1<<i);
}
vector<bool> msg(s);
int ptr = 0;
for (int i = 0;ptr < s && i< 30;i++) {
for (auto it : clean) {
if (it == fbit) continue;
msg[ptr++] = R[cur+i][it];
}
}
cur+=30;
for (int i = 0;ptr < s;i++) {
for (auto it : clean) {
if (ptr == s) break;
msg[ptr++] = R[cur][it];
}
cur++;
}
return msg;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |