Submission #1121139

#TimeUsernameProblemLanguageResultExecution timeMemory
1121139woohyun_jngMessage (IOI24_message)C++17
76.16 / 100
2462 ms1340 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

void send_message(vector<bool> M, vector<bool> C) {
    vector<bool> A(31, 0);
    vector<int> B, cor;

    int X, S = M.size(), cur = 0, cnt = 0, K = 0;

    for (int i = 0; i < 31; i++) {
        if (C[i] == 0 && C[(i + 1) % 31] == 0) {
            for (int j = 0; j < 5; j++) {
                fill(A.begin(), A.end(), i & (1 << j));
                send_packet(A), K++;
            }
            X = i;
            break;
        }
    }

    for (int i = 0; i < 31; i++) {
        if (i == X || i == (X + 1) % 31)
            continue;
        if (C[i] == 0)
            cor.push_back(i);
        B.push_back(i);
    }

    for (int i = 0; i < 14; i++) {
        A[X] = !C[B[i * 2]], A[(X + 1) % 31] = !C[B[i * 2 + 1]];
        for (int j = 0; j < 14 && cur + j < S; j++)
            A[cor[j]] = M[cur + j];
        cur += 14;
        send_packet(A), K++;
    }

    cor.push_back(X), cor.push_back((X + 1) % 31);
    sort(cor.begin(), cor.end());

    for (int i = 0; i < 10; i++)
        A[cor[i]] = (S - 1) & (1 << i);
    send_packet(A), K++;

    while (cur < S) {
        for (int i = 0; i < 16; i++) {
            if (cur + i < S)
                A[cor[i]] = M[cur + i];
        }
        send_packet(A);
        cur += 16;
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    int cnt, X = 0, Y = 0, S = 0, cur = 0;
    vector<int> B, cor, cor2;
    vector<bool> C(31, 0), res;

    for (int i = 4; i >= 0; i--) {
        cnt = 0;
        for (bool j : R[i])
            cnt += j;
        X = (X << 1) | (cnt >= 16);
    }
    C[X] = C[(X + 1) % 31] = 1;

    for (int i = 0; i < 31; i++) {
        if (i == X || i == (X + 1) % 31)
            continue;
        B.push_back(i);
    }

    for (int i = 5; i < 19; i++)
        C[B[Y++]] = R[i][X], C[B[Y++]] = R[i][(X + 1) % 31];

    Y = 0;
    for (int i = 0; i < 31; i++) {
        if (i == B[28])
            continue;
        Y += C[i];
    }
    if (Y == 15)
        C[B[28]] = 1;

    for (int i = 0; i < 31; i++)
        if (C[i]) {
            if (!(i == X || i == (X + 1) % 31))
                cor2.push_back(i);
            cor.push_back(i);
        }

    for (int i = 9; i >= 0; i--)
        S = (S << 1) | R[19][cor[i]];
    S++;

    cnt = 5;
    while (cnt < 19 && cur < S) {
        for (int i = 0; i < 14 && cur + i < S; i++) {
            res.push_back(R[cnt][cor2[i]]);
        }
        cnt++, cur += 14;
    }

    cnt = 20;
    while (cur < S) {
        for (int i = 0; i < 16 && cur + i < S; i++)
            res.push_back(R[cnt][cor[i]]);
        cnt++, cur += 16;
    }

    return res;
}

Compilation message (stderr)

message.cpp: In function 'void send_message(std::vector<bool>, std::vector<bool>)':
message.cpp:9:35: warning: unused variable 'cnt' [-Wunused-variable]
    9 |     int X, S = M.size(), cur = 0, cnt = 0, K = 0;
      |                                   ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...