QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#695904#9237. MessageMrPythonCompile Error//C++142.9kb2024-10-31 21:02:062024-10-31 21:02:14

Judging History

你现在查看的是最新测评结果

  • [2024-10-31 21:02:14]
  • 评测
  • [2024-10-31 21:02:06]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
vector<bool> safeWrite(vector<bool> const& a, vector<bool> const& c) {
  vector<bool> res(31);
  size_t p = 0;
  for (size_t i = 0; i < 31; ++i) res[i] = (!c[i] ? a[p++] : 0);
  return res;
}
vector<bool> safeRead(vector<bool> const& a, vector<bool> const& c) {
  vector<bool> res;
  for (size_t i = 0; i < 31; ++i)
    if (!c[i]) res.emplace_back(a[i]);
  return res;
}
vector<bool> send_packet(vector<bool> A);
void send_message(vector<bool> a, vector<bool> c) {
  vector<size_t> poses;
  for (size_t i = 0; i < 31; ++i)
    if (!c[i]) poses.emplace_back(i);
  for (size_t i = 0; i < 4; ++i)
    send_packet(vector<bool>(31, (poses[0] >> i) & 1));
  for (size_t i = 0; i < 4; ++i) {
    vector<bool> dat(16);
    for (size_t j = 1; j < 16; ++j)
      dat[j - 1] = ((poses[j] - poses[j - 1] - 1) >> i) & 1;
    dat[15] = ((a.size() % 16) >> i) & 1;
    send_packet(safeWrite(dat, c));
  }
  vector<bool>::iterator it = a.begin(), jt = it + 16;
  for (; jt < a.end(); it += 16, jt += 16)
    send_packet(safeWrite(vector<bool>(it, jt), c));
  {
    vector<bool> lst(it, a.end());
    lst.resize(16);
    send_packet(safeWrite(lst, c));
  }
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> r) {
  reverse(r.begin(), r.end());
  size_t rev = 0;
  vector<size_t> poses(16);
  for (size_t j = 0; j < 4; ++j) {
    poses[0] |= unsigned(count(r.back().begin(), r.back().end(), true) >= 16)
                << j;
    r.pop_back();
  }
  for (size_t i = 1; i < 16; ++i) {
    for (size_t j = 0; j < 4; ++j)
      poses[i] |= unsigned(r.rbegin()[j][poses[i - 1]]) << j;
    poses[i] += poses[i - 1] + 1;
  }
  for (size_t j = 0; j < 4; ++j) rev |= unsigned(r.rbegin()[j][poses[15]]) << j;
  if (rev == 0) rev = 16;
  r.erase(r.end() - 4, r.end());
  vector<bool> c(31, true);
  for (size_t i : poses) c[i] = false;
  vector<bool> ans;
  while (r.size() > 1) {
    vector<bool> h = safeRead(r.back(), c);
    ans.insert(ans.end(), h.begin(), h.end());
    r.pop_back();
  }
  {
    vector<bool> h = safeRead(r.back(), c);
    ans.insert(ans.end(), h.begin(), h.begin() + rev);
  }
  return ans;
}

#ifndef ONLINE_JUDGE
vector<vector<bool>> packets;
vector<bool> d(31);
mt19937 rd((random_device())());
uniform_int_distribution<unsigned short int> rdb(0, 1);
vector<bool> send_packet(vector<bool> A) {
  assert(A.size() == 31);
  for (size_t i = 0; i < 31; ++i)
    if (d[i]) A[i] = rdb(rd);
  packets.emplace_back(A);
  return A;
}
int main(void) {
  size_t n;
  cin >> n;
  vector<bool> dat(n);
  for (auto i : dat) {
    char c;
    cin >> c;
    i = c == '1';
  }
  for (auto i : d) {
    char c;
    cin >> c;
    i = c == '1';
  }
  send_message(dat, d);
  vector<bool> res = receive_message(packets);
  assert(res == dat);
  cerr << packets.size();
}
#endif

詳細信息

stub.cpp: In function ‘int {anonymous}::sz(const C&)’:
stub.cpp:27:52: error: ‘size’ is not a member of ‘std’; did you mean ‘size_t’?
   27 | template<class C> int sz(const C& c) { return std::size(c); }
      |                                                    ^~~~
      |                                                    size_t
stub.cpp: In function ‘void {anonymous}::write_int_array(const int*, int)’:
stub.cpp:70:13: warning: init-statement in selection statements only available with ‘-std=c++17’ or ‘-std=gnu++17’
   70 |         if (int ret = fwrite(arr, sizeof(int), len, fout); len != ret) {
      |             ^~~
stub.cpp: In function ‘void {anonymous}::read_int_array(int*, int)’:
stub.cpp:105:13: warning: init-statement in selection statements only available with ‘-std=c++17’ or ‘-std=gnu++17’
  105 |         if (int ret = fread(arr, sizeof(int), len, fin); len != ret) {
      |             ^~~