QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#561996#9237. MessageZanite#39.115 267ms4140kbC++205.4kb2024-09-13 14:06:322024-09-13 14:06:33

Judging History

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

  • [2024-09-13 14:06:33]
  • 评测
  • 测评结果:39.115
  • 用时:267ms
  • 内存:4140kb
  • [2024-09-13 14:06:32]
  • 提交

answer

#include "message.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define All(x)   x.begin(), x.end()
#define debug(x) cout << #x << " = " << x << "\n"

template<typename T> bool chmax(T &u, T v) { if (u < v) { u = v; return true; } return false; }

template<typename T>
ostream& operator<<(ostream& os, const vector<T> &v) {
    os << "["; bool _first = true;
    for (auto i : v) { if (!_first) { os << ", "; } os << i; _first = false; }
    return os << "]";
}

const ll INF = 1'000'000'000'000'000'000;

const int PKT_SIZE  = 31;
const int FREE_IDX  = 16;
const int CLEO_IDX  = 15;
const int M_SZ_BITS = 10;
const int F_ID_BITS = 5;

void send_message(vector<bool> M, vector<bool> C) {
    int S = M.size();
    vector<int> free_indices;
    for (int i = 0; i < PKT_SIZE; i++) if (!C[i]) free_indices.push_back(i);

    vector<int> f_id_transmit;
    for (auto f : free_indices) {
        for (int i = 0; i < F_ID_BITS; i++) {
            f_id_transmit.push_back((f >> i) & 1);
        }
    }

    // Transmit free indices
    int transmitted_free = 0;
    int ptr = 0;
    while (ptr < (int)f_id_transmit.size()) {
        vector<bool> cur(PKT_SIZE);
        if (FREE_IDX - transmitted_free > CLEO_IDX) {
            // transmit through unknown bits
            for (int i = transmitted_free; i < FREE_IDX; i++) {
                // cerr << f_id_transmit[ptr];
                cur[free_indices[i]] = f_id_transmit[ptr];
            }
            ptr++;
        }

        // transmit through known bits
        for (int i = 0; i < transmitted_free; i++) {
            if (ptr < (int)f_id_transmit.size()) {
                // cerr << f_id_transmit[ptr];
                cur[free_indices[i]] = f_id_transmit[ptr++];
            }
        }
        // cerr << "\n";

        send_packet(cur);
        transmitted_free = ptr / 5;
    }
    
    vector<bool> T;
    for (int i = 0; i < M_SZ_BITS; i++) T.push_back((S-1) & (1 << i));
    for (auto i : M) T.push_back(i);

    ptr = 0;
    while (ptr < (int)T.size()) {
        vector<bool> cur(PKT_SIZE);
        for (auto idx : free_indices) if (ptr < (int)T.size()) {
            cur[idx] = T[ptr++];
        }
        send_packet(cur);
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    int read_packets = 0;

    vector<int> free_indices;
    vector<bool> is_free(PKT_SIZE);
    queue<bool> pending;
    while ((int)free_indices.size() < FREE_IDX) {
        // cerr << free_indices << "\n";

        vector<bool> cur_packet = R[read_packets++];

        if (FREE_IDX - (int)free_indices.size() > CLEO_IDX) {
            // read unknown bits
            int cnt[2] = {};
            for (int j = 0; j < PKT_SIZE; j++) if (!is_free[j]) {
                cnt[cur_packet[j]]++;
            }
            pending.push((cnt[0] > cnt[1]) ? 0 : 1);
        }

        // read known bits
        for (auto f : free_indices) pending.push(cur_packet[f]);

        while (pending.size() >= 5 && (int)free_indices.size() < FREE_IDX) {
            int c = 0;
            for (int i = 0; i < 5; i++) {
                c |= (pending.front() << i);
                pending.pop();
            }
            free_indices.push_back(c);
            is_free[c] = true;
        }
    }

    vector<bool> transmitted;
    while (read_packets < (int)R.size()) {
        vector<bool> cur_packet = R[read_packets++];
        for (auto j : free_indices) transmitted.push_back(cur_packet[j]);
    }

    int sz = 0;
    for (int i = 0; i < M_SZ_BITS; i++) if (transmitted[i]) {
        sz |= (1 << i);
    }
    sz++;

    vector<bool> ans;
    for (int i = M_SZ_BITS; i < M_SZ_BITS + sz; i++) ans.push_back(transmitted[i]);

    return ans;
}

#ifdef Zanite

namespace {
const int PACKET_SIZE = 31;
const int CALLS_CNT_LIMIT = 100;

int calls_cnt;
vector<bool> C(PACKET_SIZE);
vector<vector<bool>> R;

void quit(const char* message) {
    printf("%s\n", message);
    exit(0);
}

void run_scenario() {
    R.clear();
    calls_cnt = 0;

    int S;
    assert(1 == scanf("%d", &S));
    vector<bool> M(S);
    for (int i = 0; i < S; i++) {
        int bit;
        assert(1 == scanf("%d", &bit));
        assert((bit == 0) || (bit == 1));
        M[i] = bit;
    }

    for (int i = 0; i < PACKET_SIZE; i++) {
        int bit;
        assert(1 == scanf("%d", &bit));
        assert((bit == 0) || (bit == 1));
        C[i] = bit;
    }

    send_message(M, C);
    vector<bool> D = receive_message(R);

    int K = (int)R.size();
    int L = (int)D.size();
    printf("%d %d\n", K, L);
    for (int i = 0; i < L; i++)
        printf("%s%d", (i == 0 ? "" : " "), (D[i] ? 1 : 0));
    printf("\n");
}

vector<bool> taint(const vector<bool>& A) {
    vector<bool> B = A;
    bool bit = 0;
    for (int i = 0; i < PACKET_SIZE; i++)
        if (C[i] == 1) {
            B[i] = bit;
            bit = !bit;
        }
    return B;
}

} // namespace

vector<bool> send_packet(vector<bool> A) {
    calls_cnt++;
    if (calls_cnt > CALLS_CNT_LIMIT)
        quit("Too many calls");
    if ((int)A.size() != PACKET_SIZE)
        quit("Invalid argument");

    vector<bool> B = taint(A);
    R.push_back(B);
    return B;
}

int main() {
    int T;
    assert(1 == scanf("%d", &T));
    for (int i = 1; i <= T; i++)
        run_scenario();
}

#endif

详细

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 64ms
memory: 3848kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #2:

score: 10
Accepted
time: 51ms
memory: 3768kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #3:

score: 10
Accepted
time: 59ms
memory: 4052kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #4:

score: 10
Accepted
time: 107ms
memory: 4124kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #5:

score: 10
Accepted
time: 40ms
memory: 4020kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #6:

score: 10
Accepted
time: 31ms
memory: 3812kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #7:

score: 10
Accepted
time: 21ms
memory: 4016kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Subtask #2:

score: 29.115
Acceptable Answer

Test #8:

score: 29.115
Acceptable Answer
time: 267ms
memory: 4068kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #9:

score: 30.654
Acceptable Answer
time: 123ms
memory: 4036kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3406

result:

points 0.3406

Test #10:

score: 29.115
Acceptable Answer
time: 217ms
memory: 4048kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #11:

score: 29.115
Acceptable Answer
time: 192ms
memory: 4036kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #12:

score: 30.654
Acceptable Answer
time: 207ms
memory: 4136kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3406

result:

points 0.3406

Test #13:

score: 29.115
Acceptable Answer
time: 163ms
memory: 4140kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #14:

score: 29.115
Acceptable Answer
time: 123ms
memory: 4000kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #15:

score: 29.115
Acceptable Answer
time: 149ms
memory: 3832kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235

Test #16:

score: 30.654
Acceptable Answer
time: 146ms
memory: 3848kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3406

result:

points 0.3406

Test #17:

score: 90
Accepted
time: 65ms
memory: 4020kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #18:

score: 90
Accepted
time: 106ms
memory: 4012kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #19:

score: 90
Accepted
time: 81ms
memory: 3796kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #20:

score: 90
Accepted
time: 120ms
memory: 3824kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #21:

score: 90
Accepted
time: 125ms
memory: 4056kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #22:

score: 90
Accepted
time: 134ms
memory: 4016kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

1

result:

points 1.0

Test #23:

score: 81.225
Acceptable Answer
time: 156ms
memory: 4028kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.9025

result:

points 0.9025

Test #24:

score: 59.706
Acceptable Answer
time: 225ms
memory: 4124kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.6634

result:

points 0.6634

Test #25:

score: 43.893
Acceptable Answer
time: 201ms
memory: 4064kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.4877

result:

points 0.4877

Test #26:

score: 30.654
Acceptable Answer
time: 183ms
memory: 3768kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3406

result:

points 0.3406

Test #27:

score: 29.115
Acceptable Answer
time: 204ms
memory: 3836kb

Manager to Aisha


Aisha to Manager


Manager to Basma


Basma to Manager


Manager to Checker

0.3235

result:

points 0.3235