Submission #1231439

#TimeUsernameProblemLanguageResultExecution timeMemory
1231439banganMessage (IOI24_message)C++20
29.32 / 100
544 ms860 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

const int N = 31;

void send_message(std::vector<bool> M, std::vector<bool> C) {
    assert(C.size()==N);
    for (bool x : C) send_packet(vector<bool>(N, x));
    
    vector<int> ok;
    for (int i=0; i<N; i++) if (!C[i]) ok.pb(i);
    assert(ok.size()==16);
    
    auto cur = ok.begin();
    vector<bool> pac(31, false);
    for (bool x : M) {
        if (cur==ok.end()) {
            send_packet(pac);
            pac = vector<bool>(31, false);
            cur = ok.begin();
        }
        pac[*cur] = x;
        cur++;
    }

    if (cur == ok.end()) {
        send_packet(pac);
        pac = vector<bool>(31, false);
        cur = ok.begin();
    }
    pac[*cur] = true;
    send_packet(pac);
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
    vector<bool> C(N);
    vector<bool> M;
    for (int i=0; i<N; i++) {
        auto vec = R[i];
        int cnt[2] {};
        for (bool x : vec) cnt[x]++;
        if (cnt[0]<cnt[1]) C[i]=1;
        else C[i]=0;
    }

    for (int i=N; i+1 < R.size(); i++) {
        auto vec = R[i];
        for (int j=0; j<N; j++) if (!C[j]) M.pb(vec[j]);
    }

    auto vec = R.back();
    int lst=0;
    for (int i=0; i<N; i++) if (!C[i] && vec[i]) lst=i;

    for (int i=0; i<lst; i++) if (!C[i]) M.pb(vec[i]);

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