Submission #1217326

#TimeUsernameProblemLanguageResultExecution timeMemory
1217326HappyCapybaraMessage (IOI24_message)C++20
100 / 100
383 ms852 KiB
#include "message.h"
#include<bits/stdc++.h>
using namespace std;

void send_message(vector<bool> M, vector<bool> C){
  vector<int> b;
  for (int i=0; i<31; i++){
    if (!C[i]) b.push_back(i);
  }
  vector<vector<bool>> R(66, vector<bool>(31));
  int cur = -1;
  for (int i=0; i<16; i++){
    for (int j=0; j<66; j++){
      if (j < (b[(i+1)%16]-b[i]-1+31)%31) R[j][b[i]] = 0;
      else if (j == (b[(i+1)%16]-b[i]-1+31)%31) R[j][b[i]] = 1;
      else if (0 & ++cur) ;
      else if (cur < M.size()) R[j][b[i]] = M[cur];
      else if (cur == M.size()) R[j][b[i]] = 1;
      else R[j][b[i]] = 0;
    }
  }
  for (int i=0; i<66; i++) send_packet(R[i]);
}

vector<bool> receive_message(vector<vector<bool>> R){
  vector<int> a(31, 1);
  for (int i=0; i<31; i++){
    for (int j=0; j<66; j++){
      if (R[j][i]){
        a[i] = j+1;
        break;
      }
    }
    a[i] = (i+a[i]) % 31;
  }
  vector<int> b;
  for (int i=0; i<16; i++){
    b = {i};
    int cur = a[i];
    while (cur != i){
      b.push_back(cur);
      cur = a[cur];
      if (b.size() > 16) break;
    }
    if (b.size() == 16) break;
  }
  vector<bool> M;
  for (int i=0; i<16; i++){
    for (int j=(b[(i+1)%16]-b[i]+31)%31; j<66; j++) M.push_back(R[j][b[i]]);
  }
  while (!M.back()) M.pop_back();
  M.pop_back();
  return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...