QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#844412#9237. Messagenodgd0 0ms0kbC++202.0kb2025-01-05 21:16:452025-01-05 21:16:46

Judging History

This is the latest submission verdict.

  • [2025-01-05 21:16:46]
  • Judged
  • Verdict: 0
  • Time: 0ms
  • Memory: 0kb
  • [2025-01-05 21:16:45]
  • Submitted

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

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Instance #1 Runtime Error

Test #1:

score: 0
Instance #1 Runtime Error

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0
ing with message 'manual RTE, cant read int from grader'
Quitting with result code 1

result:


Subtask #2:

score: 0
Instance #1 Runtime Error

Test #8:

score: 0
Instance #1 Runtime Error

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0
ing with message 'manual RTE, cant read int from grader'
Quitting with result code 1

result: