Submission #1302065

#TimeUsernameProblemLanguageResultExecution timeMemory
1302065regulardude6Message (IOI24_message)C++20
10 / 100
497 ms812 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

void send_message(vector<bool> M, vector<bool> C) {
    for (int i = 0; i < 31; i++) {
        vector<bool> p(31, C[i]);
        send_packet(p);
    }

    int S = M.size();
    vector<bool> bits;
    for (int i = 9; i >= 0; i--) bits.push_back((S >> i) & 1);
    for (bool b : M) bits.push_back(b);

    vector<int> safe;
    for (int i = 0; i < 31; i++) if (!C[i]) safe.push_back(i);

    int blocks = (bits.size() + 15) / 16;
    for (int b = 0; b < blocks; b++) {
        vector<bool> p(31, false);
        for (int i = 0; i < 16; i++) {
            int k = b * 16 + i;
            if (k < (int)bits.size()) p[safe[i]] = bits[k];
        }
        send_packet(p);
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    vector<int> C(31);
    for (int i = 0; i < 31; i++) {
        int ones = 0;
        for (bool b : R[i]) ones += b;
        C[i] = (ones > 15);
    }

    vector<int> safe;
    for (int i = 0; i < 31; i++) if (!C[i]) safe.push_back(i);

    vector<bool> bits;
    for (int i = 31; i < (int)R.size(); i++)
        for (int j = 0; j < 16; j++)
            bits.push_back(R[i][safe[j]]);

    int S = 0;
    for (int i = 0; i < 10; i++) S = (S << 1) | bits[i];

    vector<bool> M(S);
    for (int i = 0; i < S; i++) M[i] = bits[10 + i];
    return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...