Submission #1276628

#TimeUsernameProblemLanguageResultExecution timeMemory
1276628avighnaMessage (IOI24_message)C++20
0 / 100
192 ms804 KiB
#include <bits/stdc++.h>

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

void send_message(std::vector<bool> M, std::vector<bool> C) {
  auto send = [&](const std::string &s) {
    std::vector<bool> a(s.length());
    for (int i = 0; i < s.length(); ++i) {
      a[i] = s[i] == '1';
    }
    send_packet(a);
  };
  auto send_num = [&](int n) {
    std::string msg(31, '0');
    for (int i = 0, j = 0; i < 16; ++i, ++j) {
      while (C[j]) {
        j++;
      }
      msg[j] = !!(n & 1 << i) + '0';
    }
    send(msg);
  };
  for (bool i : C) {
    send(std::string(31, i + '0'));
  }
  send_num(M.size());
  for (int i = 0; i < M.size(); i += 16) {
    int x = 0;
    for (int j = 0; j < 16 and i + j < M.size(); ++j) {
      x += int(M[i + j]) << j;
    }
    send_num(x);
  }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
  auto recv = [&](std::vector<bool> P) {
    int o = 0, z = 0;
    for (bool i : P) {
      o += i, z += !i;
    }
    return o > z;
  };

  std::vector<bool> C(31);
  int cur = 0;
  for (int i = 0; i < 31; ++i) {
    C[i] = recv(R[cur++]);
  }
  auto recv_num = [&](std::vector<bool> P) {
    int ans = 0;
    for (int i = 0, j = 0; i < 16; ++i, ++j) {
      while (C[j]) {
        j++;
      }
      ans += int(P[j]) << i;
    }
    return ans;
  };

  int size = recv_num(R[cur++]);
  std::vector<bool> M(size);
  for (int i = 0; i < size; i += 16) {
    int x = recv_num(R[cur++]);
    for (int j = 0; j < 16 and i + j < size; ++j) {
      M[j] = !!(x & 1 << j);
    }
  }

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