제출 #1344355

#제출 시각아이디문제언어결과실행 시간메모리
1344355SulA메시지 (IOI24_message)C++20
10 / 100
382 ms832 KiB
#include "message.h"
#include <bits/stdc++.h>
#define all(a) (a).begin(), (a).end()
#define popcount(x) __builtin_popcountll(x)
using namespace std;

void send_message(vector<bool> message, vector<bool> C) {
    message.push_back(1);
    while (message.size() < 1025)
        message.push_back(0);

    vector<int> mine;
    int jump[31];
    for (int i = 0; i < 31; i++)
        if (C[i] == 0)
            mine.push_back(i);
    for (int i = 0; i < 16; i++) {
        jump[mine[i]] = (mine[(i + 1) % 16] - mine[i] + 31) % 31;
    }

    int ptr = 0;
    for (int i = 0; i < 66; i++) {
        vector<bool> packet(31);
        for (int j = 0; j < 31; j++) {
            if (C[j]) continue;
            if (i < jump[j] - 1)
                packet[j] = 0;
            else if (i == jump[j] - 1)
                packet[j] = 1;
            else
                packet[j] = message[ptr++];
        }
        send_packet(packet);
    }
    assert(ptr == 1025);
}

vector<bool> receive_message(vector<vector<bool>> packets) {
    int jump[31];
    for (int j = 0; j < 31; j++) {
        int i = 0;
        while (i < 66 && packets[i][j] == 0)
            i++;
        jump[j] = i+1;
    }
//    return {};
    vector<bool> C(31, 1);
    for (int j = 0; j < 31; j++) {
        int cur = j;
        for (int iter = 0; iter < 16; iter++)
            cur = (cur + jump[cur]) % 31;
        if (cur == j)
            C[j] = 0;
    }
    vector<bool> message;
    for (int i = 0; i < 66; i++) {
        for (int j = 0; j < 31; j++) {
            if (C[j]) continue;
            if (jump[j] <= i)
                message.push_back(packets[i][j]);
        }
    }
//    assert(message.size() == 1025);
    int x = 0;
    while (x == 0) {
        x = message.back();
        message.pop_back();
    }
    return message;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...