#include "message.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void send_message(std::vector<bool> M, std::vector<bool> C) {
vector<int> A;
for (int i=0;i<31;i++) if (!C[i]) A.push_back(i);
A.push_back(A[0] + 31);
vector<vector<bool>> ans(31);
for (int i=0;i<16;i++){
for (int j=0;j<A[i+1]-A[i]-1;j++) ans[A[i]].push_back(false);
ans[A[i]].push_back(true);
}
M.push_back(true);
for (int i=0,j=0;i<16;i++){
while(ans[A[i]].size() < 66){
if (j < (int)M.size()) ans[A[i]].push_back(M[j++]);
else ans[A[i]].push_back(false);
}
}
for (int i=0;i<31;i++) ans[i].resize(66);
for (int i=0;i<66;i++){
vector<bool> V;
for (int j=0;j<31;j++) V.push_back(ans[j][i]);
send_packet(V);
}
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
vector<int> P(31);
for (int i=0;i<31;i++){
P[i] = i+1;
for (int j=0;j<66;j++){
if (R[j][i]) break;
P[i]++;
}
P[i] %= 31;
}
for (int i=0;i<31;i++){
vector<int> cyc;
for (int j=i;find(cyc.begin(), cyc.end(), j)==cyc.end();j=P[j]) cyc.push_back(j);
cyc.erase(cyc.begin(), find(cyc.begin(), cyc.end(), P[cyc.back()]));
if (cyc.size() == 16){
sort(cyc.begin(), cyc.end());
vector<bool> M;
for (int x=0;x<16;x++){
for (int y=0,f=0;y<66;y++){
if (R[y][x] && !f) f = 1;
else if (f) M.push_back(R[y][x]);
}
}
while(!M.back()) M.pop_back();
M.pop_back();
return M;
}
}
assert(0);
return {};
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |