#include <vector>
using namespace std;
// OJ will provide the implementation of this
extern vector<bool> send_packet(vector<bool> A);
// Constants
const int BITS = 31; // Packet length
const int REPEAT = 3; // Redundancy (must be ≥ 3 to tolerate 15 bad packets)
const int BITS_PER_PACKET = 10; // You can safely fit 10 message bits with 3 repetitions each (3 * 10 = 30 bits)
// Global to coordinate encoding/decoding
vector<pair<int, int>> encode_map; // (packet_index, bit_position)
void send_message(vector<bool> M, vector<bool> C) {
encode_map.clear();
int L = M.size();
int packets_needed = (L + BITS_PER_PACKET - 1) / BITS_PER_PACKET * REPEAT;
vector<vector<bool>> packets;
int bit_index = 0;
for (int block = 0; block < (L + BITS_PER_PACKET - 1) / BITS_PER_PACKET; ++block) {
for (int r = 0; r < REPEAT; ++r) {
vector<bool> pkt(BITS, 0);
for (int b = 0; b < BITS_PER_PACKET && bit_index < L; ++b) {
int pos = b * REPEAT + r; // ensure different positions per repetition
pkt[pos] = M[bit_index];
if (r == 0) encode_map.push_back({packets.size(), pos});
}
packets.push_back(pkt);
}
bit_index += BITS_PER_PACKET;
}
for (auto& pkt : packets) {
send_packet(pkt);
}
}
vector<bool> receive_message(vector<vector<bool>> R) {
vector<bool> decoded;
for (int i = 0; i < encode_map.size(); ++i) {
int base = (i / BITS_PER_PACKET) * REPEAT;
int bit_pos = (i % BITS_PER_PACKET) * REPEAT;
int ones = 0;
for (int r = 0; r < REPEAT; ++r) {
if (R[base + r][bit_pos + r]) ones++;
}
decoded.push_back(ones >= 2);
}
return decoded;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |