#include <bits/stdc++.h>
#include "message.h"
using namespace std;
#define ll long long
const ll mmod = 998244353;
#define vl vector<long long>
#define vll vector<vector<long long>>
#define pl pair<long long, long long>
#define vb vector<bool>
void send_message(std::vector<bool> M, std::vector<bool> C){
reverse(M.begin(), M.end());
M.push_back(1);
while (M.size() < 1025){
M.push_back(0);
}
reverse(M.begin(), M.end());
vector<vector<bool>> packets(66, vector<bool> (31, 0));
vl depth(31, 0);
for (ll i = 0; i < 31; i++){
ll j = 1;
if (C[i]){
while (C[(i+j)%31] == false){
j++;
}
}
packets[j-1][i] = 1;
depth[i] = j;
}
ll p = 0;
for (ll i = 0; i < 31; i++){
for (ll j = depth[i]; j < 66; j++){
if (C[i]){
packets[j][i] = M[p];
p++;
}
}
}
for (ll i = 0; i < 66; i++){
send_packet(packets[i]);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R){
vl pointer(31, 0);
vl depth(31, 0);
for (ll i = 0; i < 31; i++){
for (ll j = 0; j < 66; j++){
if (R[j][i]){
if (pointer[i] == 0){
pointer[i] = (i+j+1)%31;
depth[i] = j+1;
}
}
}
}
for (ll i = 0; i < 31; i++){if (pointer[i] == 0) pointer[i] = 1;}
set<ll> c;
for (ll i = 0; i < 31; i++){
c.clear();
ll pos = i;
for (ll j = 0; j < 16; j++){
c.insert(pos);
pos = pointer[pos];
}
if (pointer[pos] == i && c.size() == 16){
break;
}
}
vector<bool> m;
for (auto x: c){
for (ll i = depth[x]; i < 66; i++){
m.push_back(R[i][x]);
}
}
vector<bool> M;
ll p = 0;
while (p < m.size() && m[p] == 0){
p++;
}
p++;
for (ll i = p; i < 1025; i++){
if (i < m.size()) M.push_back(m[i]);
else M.push_back(0);
}
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... |