Submission #1303313

#TimeUsernameProblemLanguageResultExecution timeMemory
1303313kawhietMessage (IOI24_message)C++20
28.35 / 100
552 ms828 KiB
#include <bits/stdc++.h>
#include "message.h"
using namespace std;

void send_message(vector<bool> a, vector<bool> c) {
  vector<int> zeros;
  for (int i = 0; i < 31; i++) {
    vector<bool> cur(31, c[i]);
    if (c[i] == 0) {
      zeros.push_back(i);
    }
    send_packet(cur);
  }
  int n = a.size();
  int left = n;
  int i = 15;
  for (; i < n; i += 16) {
    left -= 16;
    vector<bool> cur(31);
    int k = 0;
    for (int j = i - 15; j <= i; j++) {
      cur[zeros[k++]] = a[j];
    }
    send_packet(cur);
  }
  i -= 16;
  int f = left;
  vector<bool> cnt(31);
  for (auto j : zeros) {
    if (left == 0) break;
    cnt[j] = 1;
    left--;
  }
  send_packet(cnt);
  i++;
  vector<bool> finisher(31);
  int k = 0;
  for (; i < a.size(); i++) {
    if (f == 0) break;
    f--;
    finisher[zeros[k++]] = a[i];
  }
  send_packet(finisher);
}

vector<bool> receive_message(vector<vector<bool>> r) {
  vector<bool> correct(31);
  vector<int> zeros;
  for (int i = 0; i < 31; i++) {
    int one = count(r[i].begin(), r[i].end(), 1);
    int zero = 31 - one;
    if (one > zero) {
      correct[i] = 1;
    } else {
      correct[i] = 0;
      zeros.push_back(i);
    }
  }
  int n = r.size();
  vector<bool> ret;
  for (int i = 31; i < n - 2; i++) {
    auto a = r[i];
    for (auto j : zeros) {
      ret.push_back(a[j]);
    }
  }
  int cnt = 0;
  for (auto i : zeros) {
    cnt += r[n - 2][i];
  }
  for (auto i : zeros) {
    if (cnt == 0) break;
    cnt--;
    ret.push_back(r[n - 1][i]);
  }
  return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...