Submission #1133638

#TimeUsernameProblemLanguageResultExecution timeMemory
1133638LuvidiMessage (IOI24_message)C++20
77.38 / 100
420 ms852 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

void send_message(std::vector<bool> m, std::vector<bool> c) {
    int idx=0;
    while(c[idx])idx++;
    vector<vector<bool>> a(67,vector<bool>(31));
    for(int i=0;i<31;i++){
        a[i][idx]=c[i];
    }
    int n=m.size();
    for(int i=31;i<42;i++){
        a[i][idx]=n&(1<<i-31);
    }
    int curr=0;
    for(int i=0;i<67;i++){
        for(int j=0;j<31;j++){
            if(c[j])continue;
            if(j==idx&&i<42)continue;
            if(curr<n){
                a[i][j]=m[curr++];
            }
        }
    }
    for(auto v:a)send_packet(v);
    for(int i=0;i<4;i++){
        vector<bool> t;
        for(int j=0;j<31;j++){
            t.push_back(idx>>i&1);
        }
        send_packet(t);
    }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> b) {
    int idx=0;
    for(int i=0;i<4;i++){
        int cnt=0;
        for(int j=0;j<31;j++){
            cnt+=b[67+i][j];
        }
        idx+=(cnt>15)*(1<<i);
    }
    vector<bool> c(31);
    for(int i=0;i<31;i++){
        c[i]=b[i][idx];
    }
    int n=0;
    for(int i=31;i<42;i++){
        n+=b[i][idx]*(1<<i-31);
    }
    vector<bool> ans(n);
    int curr=0;
    for(int i=0;i<b.size();i++){
        for(int j=0;j<31;j++){
            if(c[j])continue;
            if(j==idx&&i<42)continue;
            if(curr<n)ans[curr++]=b[i][j];
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...