Submission #1298263

#TimeUsernameProblemLanguageResultExecution timeMemory
1298263tuandqMessage (IOI24_message)C++20
0 / 100
181 ms804 KiB
#include <bits/stdc++.h>
using namespace std ;

vector<bool> send_packet(vector<bool> A);

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

    int s = (int)M.size() - 1 ;
    reverse(M.begin(), M.end()) ;
    for(int i = 0; i < 10; i ++) {
        M.emplace_back((bool)(s >> i & 1)) ;
    }
    reverse(M.begin(), M.end()) ;

    for(int i = 10; i < M.size();) {
        vector<bool> pack(31, false) ;

        int x = min((int)M.size() - i, 16) ;
        for(int j = 0; j < x; j ++) {
            pack[idx[j]] = M[i] ; ++ i ;
        }

        send_packet(pack) ;
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    vector<int> idx ;
    for(int i = 0; i < 31; i ++) {
        vector<bool> &pack = R[i] ;

        vector<int> cnt(2, 0) ;
        for(int j = 0; j < 31; j ++) ++ cnt[(int)pack[j]] ;

        if(cnt[0] > cnt[1]) idx.emplace_back(i) ;
    }

    int numSz = 0 ;
    for(int i = 0; i < 10; i ++) {
        numSz = numSz << 1 | ((int)R[31][i]) ;
    }

    vector<bool> res ;
    int iter = 9, num = 31 ;
    for(; numSz > 0; numSz --) {
        if(++ iter == 16) iter = 0, ++ num ;
        res.emplace_back(R[num][iter]) ;
    }
    return res ;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...