Submission #1294513

#TimeUsernameProblemLanguageResultExecution timeMemory
1294513lucas110550Message (IOI24_message)C++20
10 / 100
378 ms816 KiB
#include <vector>
#include <map>
#include <algorithm>
#include "message.h"

void send_message(std::vector<bool> M, std::vector<bool> C) {
    const int W = 31; // fixed width as in the Python code
    const int S = static_cast<int>(M.size());

    // (Assume C has at least 31 elements; mirror the Python behavior.)
    for (int i = 0; i < S; ++i) {
        std::vector<bool> A(W, false);
        for (int j = 0; j < W; ++j) {
            if (!C[j]) {
                A[j] = M[i];
            } else {
                // (i % 2) XOR M[i]
                A[j] = static_cast<bool>((i % 2) ^ static_cast<int>(M[i]));
            }
        }
        (void)send_packet(A); // ignore return, Python didn't use it
    }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
    const int W = 31; // fixed width as in the Python code
    const int n = static_cast<int>(R.size());

    // Count occurrences of each column sequence
    std::map<std::vector<bool>, int> count;

    for (int j = 0; j < W; ++j) {
        std::vector<bool> seq;
        seq.reserve(n);
        for (int i = 0; i < n; ++i) {
            // Assume each row has at least 31 entries (like the Python version)
            seq.push_back(R[i][j]);
        }
        ++count[seq];
    }

    // Return any sequence that appears at least 16 times
    for (const auto& kv : count) {
        if (kv.second >= 16) {
            return kv.first;
        }
    }

    // Otherwise return the first (arbitrary in Python; lexicographically first in map)
    if (!count.empty()) {
        return count.begin()->first;
    }

    return {};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...