#include <vector>
#include "message.h"
using namespace std;
void send_message(std::vector<bool> M, std::vector<bool> C) {
vector<int> rindex;
for (int i = 0; i != 31; ++i){
if (C[i]) {
rindex.push_back(i);
}
}
int first_index = rindex.front();
for (int i = 0; i < 5; ++i) {
send_packet(vector<bool>(31, (first_index>>i) & 1));
}
rindex.erase(rindex.begin());
int id = 0;
for (int i =0; i != 31 && id < M.size(); ++i){
vector<bool> package(31, 0);
package[first_index] = C[i];
for (int x : rindex){
package[x] = M[id++];
}
send_packet(package);
}
while (id < M.size()) {
vector<bool> packet(31, 0);
for (int x : rindex) {
int next = id < M.size() ? M[id++] : 0;
packet[x] = next;
}
}
vector<bool> sizePacket(31, 0);
for (int i = 0; i < 16; ++i) {
sizePacket[rindex[i]] = (M.size() >> i) & 1;
}
send_packet(sizePacket);
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
int first_index = 0;
for (int i = 0; i < 5; ++i) {
int oc = 0;
for (auto it : R[i]){
oc += it;
}
oc = oc >= 16 ? 1 : 0;
first_index += (1 << i) * oc;
}
R.erase(R.begin(), R.end()+5);
vector<int> rindex;
for (int i = 0; i < 31; ++i) {
if (R[i][first_index] == 1){
rindex.push_back(i);
}
}
vector<bool> output;
int l = 0;
for (int i = 0; i + 1 < R.size(); ++i){
int id = (i< 31)?1:0;
for (;id < rindex.size(); ++id){
output[l++] = R[i][id];
}
}
int sz;
for (int i = 0; i < 16; ++i) {
sz += ((R.back()[rindex[i]]) << i);
}
output.resize(sz);
return output;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |