QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#844410#9237. MessagenodgdCompile Error//C++142.0kb2025-01-05 21:16:052025-01-05 21:16:06

Judging History

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

  • [2025-01-05 21:16:06]
  • 评测
  • [2025-01-05 21:16:05]
  • 提交

answer

#include <vector>
#include <assert.h>
#include "message.h"

using namespace std;

vector<bool> send_packet(vector<bool> A);

void send_message(vector<bool> M, vector<bool> C) {
    M.push_back(0);
    M.resize(1025, 1);
    int m = M.size();
    int n = C.size();
    assert(m == 1025);
    assert(n == 31);

    vector<int> f(n, 0);
    for (int p = 0; p < n; p ++) {
        if (!C[p]) {
            int &d = f[p] = 1;
            for (; C[(p + d) % n]; d ++);
        }
    }

    int Q = 66;
    vector<vector<bool>> A(Q, vector<bool>(n, 0));
    for (int i = 0, j = 0; i < Q; i ++) {
        for (int p = 0; p < n; p ++) {
            if (!C[p]) {
                if (i == f[p]) {
                    A[i][p] = 1;
                } else if (i > f[p] && j < m) {
                    A[i][p] = M[j ++];
                }
            }
        }
        send_packet(A[i]);
    }
}

vector<bool> receive_message(vector<vector<bool>> R){
    int Q = R.size(), n = R[0].size();
    assert(Q == 66);
    assert(n == 31);

    vector<int> f(n, 0), v(n, 0), d(n, 0);
    for (int p = 0; p < n; p ++) {
        int &i = f[p] = 0;
        for (; i < n && !R[i][p]; i ++);
        f[p] = (p + i) % n;
    }
    for (int p = 0; p < n; p ++) {
        int q = p, k = 1;
        for (; !v[q]; q = f[q]) {
            v[q] = 1, d[q] = k ++;
        }
        if (k - d[q] != 16) continue;
        for (; v[q] == 1; q = f[q]) {
            v[q] = 2;
        }
        break;
    }
    for (int p = 0; p < n; p ++) {
        if (v[p] == 2) {
            int &d = f[p] = 1;
            for (; v[(p + d) % n] != 2; d ++);
        }
    }

    vector<bool> M;
    for (int i = 0, j = 0; i < Q; i ++) {
        for (int p = 0; p < n; p ++) {
            if (v[p] == 2 && i > f[p]) {
                M[j ++] = R[i][p];
            }
        }
    }
    assert(M.size() == 1025);
    for (int i = M.size() - 1; i >= 0; i --) {
        if (!M[i]) {
            M.resize(i - 1);
            break;
        }
    }
    return M;
}

Details

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) {
      |             ^~~