제출 #1189551

#제출 시각아이디문제언어결과실행 시간메모리
1189551raspy메시지 (IOI24_message)C++20
77.38 / 100
403 ms824 KiB
#include "message.h"

using namespace std;

void send_message(vector<bool> m, vector<bool> c)
{
  int M = m.size();
  while (m.size() < 1024)
    m.push_back(false);
  int n = c.size();
  vector<int> poznani;
  for (int i = 0; i < n; i++)
    if (c[i] == 0)
      poznani.push_back(i);
  vector<bool> a(n, false);
  for (int j = 0; j < 4; j++)
  {
    if (poznani[0]>>j&1)
      a = vector<bool>(n, true);
    else
      a = vector<bool>(n, false);
    send_packet(a);
  }
  int ix = poznani[0]+1;
  for (int i = 0; i < 1024;)
  {
    if (ix < 31)
    {
      for (int j = 0; j < 15; j++)
        a[poznani[j+1]] = m[j+i];
      a[poznani[0]] = !c[ix];
      ix++;
      i+=15;
    }
    else
    {
      for (int j = 0; j < 16; j++)
        a[poznani[j]] = m[j+i];
      i+=16;
    }
    send_packet(a);
  }
  a = vector<bool>(n, false);
  for (int j = 0; j < 16; j++)
    if (M>>j&1)
      a[poznani[j]] = true;
  send_packet(a);
}

vector<bool> receive_message(vector<vector<bool>> r)
{
  int prvi_ix = 0;
  for (int i = 0; i < 4; i++)
  {
    int stb = 0;
    for (bool v : r[i])
      stb += (v ? 1 : 0);
    if (stb >= 16)
      prvi_ix += (1 << i);
  }
  vector<int> poznani;
  poznani.push_back(prvi_ix);
  int ix = poznani[0]+1;
  for (int i = 4; ix < 31; i++)
  {
    if (r[i][poznani[0]])
      poznani.push_back(ix);
    ix++;
  }
  ix = poznani[0]+1;
  vector<bool> message;
  for (int i = 4; i < r.size()-1; i++)
  {
    if (ix < 31)
    {
      for (int j = 0; j < 15; j++)
        message.push_back(r[i][poznani[j+1]]);
      ix++;
    }
    else
    {
      for (int j = 0; j < 16; j++)
        message.push_back(r[i][poznani[j]]);
    }
  }
  int M = 0;
  for (int j = 0; j < 16; j++)
    if (r.back()[poznani[j]])
      M += (1 << j);
  vector<bool> rez;
  for (int i = 0; i < M; i++)
    rez.push_back(message[i]);
  return rez;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...