Submission #1364529

#TimeUsernameProblemLanguageResultExecution timeMemory
1364529eradaxMessage (IOI24_message)C++20
28.35 / 100
380 ms824 KiB
#include "message.h"
#include<bits/stdc++.h>
using namespace std;
using vb=vector<bool>;

void dbg(vector<int> a){
    cerr<<"vb a =";
    for(int i:a)cerr<<' '<<i;
    cerr<<endl;
}
void dbg(vb a){
    cerr<<"vb a =";
    for(int i:a)cerr<<' '<<i;
    cerr<<endl;
}

void send_message(vb M, vb C){
    int n=ssize(M),m=ssize(C);

    vector<int> c2;
    for(int i=0;i<m;i++)if(!C[i])c2.push_back(i);
    assert(ssize(c2)==16);

    // dbg(c2);

    for(int i=0;i<m;i++){
        vb o;o.insert(begin(o),m,C[i]);
        send_packet(o);
    }

    for(int i=0;i*16<=n;i++){
        vb o(m);
        for(int j=0;j<16;j++)if(i*16+j<n)o[c2[j]]=M[i*16+j];
        send_packet(o);
    }

    vb o(m);
    for(int i=0;i<16;i++)o[c2[i]]=(n>>i)&1;
    send_packet(o);
}

vb receive_message(vector<vb> R){
    int n=0,m=ssize(R[0]);
    vector<int> c2;
    for(int i=0;i<m;i++){
        int s=accumulate(begin(R[i]),end(R[i]),0);
        if(s<16)c2.push_back(i);
    }

    // dbg(c2);
    assert(ssize(c2)==16);

    vb o;
    for(int i=m;i<ssize(R)-1;i++){
        for(int j:c2)o.push_back(R[i][j]);
    }

    cerr<<"ssize(o)="<<ssize(o)<<'\n';
    for(int i=15;~i;i--)(n*=2)+=R.back()[c2[i]];
    o.resize(n);
    return o;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...