Submission #1164741

#TimeUsernameProblemLanguageResultExecution timeMemory
1164741yusuf12360Message (IOI24_message)C++20
29.32 / 100
526 ms860 KiB
#include "message.h"
#include<bits/stdc++.h>
#define ll long long
#define vi vector<int>
#define vll vector<ll>
#define pb push_back
#define fi first
#define se second
#pragma gcc optimize("O3")
using namespace std;

void send_message(vector<bool> M, vector<bool> C) {
    for(int i = 0; i < C.size(); i++) {
        send_packet(vector<bool>(31, C[i]));
    }
    int sz = M.size();
    vector<bool> a(31);
    for(int i = 0; i < C.size(); i++) {
        if(C[i]) continue;
        a[i] = sz & 1;
        sz /= 2;
    }
    send_packet(a);

    int idx = 0;
    while(idx < M.size()) {
        for(int i = 0; i < 31 && idx < M.size(); i++) {
            if(C[i]) continue;
            a[i] = M[idx++];
        }
        send_packet(a);
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    vector<bool> ans, C;
    for(int i = 0; i < 31; i++) {
        int cnt = 0;
        for(auto p : R[i]) {
            if(p) cnt++;
            else cnt--;
        }
        if(cnt > 0) C.pb(1);
        else C.pb(0);
    }
    int sz = 0;
    for(int i = 30; i >= 0; i--) {
        if(C[i]) continue;
        sz = sz * 2 + R[31][i];
    }

    ans.resize(sz); int idx = 0;
    for(int i = 32; i < R.size(); i++) {
        for(int j = 0; j < 31 && idx < sz; j++) {
            if(C[j]) continue;
            ans[idx++] = R[i][j];
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...