제출 #1217454

#제출 시각아이디문제언어결과실행 시간메모리
1217454dosts메시지 (IOI24_message)C++20
10 / 100
493 ms848 KiB
#include "message.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
void send_message(std::vector<bool> M, std::vector<bool> C) {
  std::vector<bool> A(31, 0);
  vi clean;
  for (int i = 0;i<31;i++) {
    for (int j = 0;j<31;j++) A[j] = C[i];
    if (!C[i]) clean.push_back(i);
    send_packet(A);
  }
  int  S = big(M);
  vector<bool> szpack(31,0);
  for (int i = 0;i<10;i++) {
    szpack[clean[i]] = !!(S&(1<<i));
  }
  send_packet(szpack);
  int j = 0;
  for (int i = 0;i<(S+15)/16;i++) {
    int ptr = 0;
    for(int t = 0;t<16;t++) {
      A[clean[ptr++]] = M[j++];
    }
    send_packet(A);
  }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
  int rsz = R.size();
/*   for (int i = 0;i<rsz;i++) {
    for (int j = 0;j<31;j++) cerr << R[i][j];
    cerr << '\n';
  } */
  vi clean;
  for (int i = 0;i<31;i++) {
    int z = 0,o = 0;
    for (auto it : R[i]) {
      if (it) o++;
      else z++;
    }
    if (z > o) clean.push_back(i);
  }
  int s = 0;
  for (int i = 0;i<10;i++) {
    if (R[31][clean[i]]) s+=(1<<i);
  }
  vector<bool> M(s);
  int j = 0;
  for (int i = 0;i<(s+15)/16;i++) {
    int ptr = 0;
    for (int t = 0;t<16;t++) {
      M[j++] = R[32+i][clean[ptr++]];
    }
  }
  return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...