제출 #1248525

#제출 시각아이디문제언어결과실행 시간메모리
1248525qwerasdfzxcl메시지 (IOI24_message)C++20
0 / 100
353 ms840 KiB
#include "message.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

void send_message(std::vector<bool> M, std::vector<bool> C) {
    vector<int> A;
    for (int i=0;i<31;i++) if (!C[i]) A.push_back(i);

    A.push_back(A[0] + 31);
    vector<vector<bool>> ans(31);

    for (int i=0;i<16;i++){
        for (int j=0;j<A[i+1]-A[i]-1;j++) ans[A[i]].push_back(false);
        ans[A[i]].push_back(true);
    }

    M.push_back(true);

    for (int i=0,j=0;i<16;i++){
        while(ans[A[i]].size() < 66){
            if (j < (int)M.size()) ans[A[i]].push_back(M[j++]);
            else ans[A[i]].push_back(false);
        }
    }

    for (int i=0;i<31;i++) ans[i].resize(66);
    
    for (int i=0;i<66;i++){
        vector<bool> V;
        for (int j=0;j<31;j++) V.push_back(ans[j][i]);
        send_packet(V);
    }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
    vector<int> P(31);
    for (int i=0;i<31;i++){
        P[i] = i+1;
        for (int j=0;j<66;j++){
            if (R[j][i]) break;
            P[i]++;
        }

        P[i] %= 31;
    }

    for (int i=0;i<31;i++){
        vector<int> cyc;
        for (int j=i;find(cyc.begin(), cyc.end(), j)==cyc.end();j=P[j]) cyc.push_back(j);
        cyc.erase(cyc.begin(), find(cyc.begin(), cyc.end(), P[cyc.back()]));

        if (cyc.size() == 16){
            sort(cyc.begin(), cyc.end());
            vector<bool> M;
            for (int x=0;x<16;x++){
                for (int y=0,f=0;y<66;y++){
                    if (R[y][x] && !f) f = 1;
                    else if (f) M.push_back(R[y][x]);
                }
            }

            while(!M.back()) M.pop_back();
            M.pop_back();
            return M;
        }
    }

    assert(0);
    return {};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...