제출 #1202719

#제출 시각아이디문제언어결과실행 시간메모리
1202719bynixMessage (IOI24_message)C++20
0 / 100
373 ms856 KiB
#include "bits/stdc++.h"
#include "message.h"
using namespace std;

void send_message(vector<bool> M, vector<bool> C) {
  vector<int> aPos;
  for (int i = 0; i < 31; i++) if (!C[i]) aPos.push_back(i);
  
  vector<bool> z(31, 0), o(31, 1);
  map<int, vector<bool>> p = {{0, z}, {1, o}};
  int first = aPos[0];
  for (int i = 0; i < 5; i++) send_packet(p[1 & (first >> i)]);

  for (int i = 0; i < 5; i++){
    vector<bool> pkt(31, 0);
    
    int k = 0;
    for (int j = 0; j < 31; j++) if (!C[j]) {
      pkt[j] = (aPos[k + 1] >> i) & 1;
      k++;
      if (k == 15) break;
    }
    send_packet(pkt);
  }

  for (int i = 0; i < 1024; i += 16){
    vector<bool> pkt(31, 0);
    int k = i;
    for (int j = 0; j < 16; j++) {
      pkt[aPos[j]] = M[k];
      k++;
    }
    send_packet(pkt);
  }
}

vector<bool> receive_message(vector<vector<bool>> R){
  vector<int> aPos(16, 0);
  int first = 0;
  for (int i = 0; i < 5; i++){
    int z = 0;
    for (int j = 0; j < 31; j++) z += R[i][j] == 0;
    first |= (z <= 15) << i;
  }
  aPos[0] = first;
  for (int k = 1; k < 16; k++) for (int j = 5; j < 10; j++) aPos[k] |= R[j][aPos[k - 1]] << (j - 5);

  vector<bool> M;
  for (int j = 10; j < 74; j++) for (auto &e: aPos) M.push_back(R[j][e]); 
  return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...