제출 #1133184

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

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

// send_packet()

void send_message(vector<bool>M,vector<bool>C){
    vector<int>h(31,0);
    for(int i=0;i<31;i++){
        if(C[i]==0){
            for(int j=1;j<=31;j++){
                if(C[(i+j)%31]==0){
                    h[i]=j;
                    break;
                }
            }
        }
    }
    bool last=M.back();
    last^=true;
    while(M.size()<1025){
        M.pb(last);
    }
    int cur=0;
    vector<vector<bool>>R(66,vector<bool>(31));
    for(int i=0;i<31;i++){
        if(C[i]==0){
            R[h[i]-1][i]=1;
            for(int j=h[i];j<66;j++){
                R[j][i]=M[cur];
                cur++;
            }
        }
    }
    assert(cur==1025);
    for(int i=0;i<66;i++){
        send_packet(R[i]);
    }
    return;
}

vector<bool>receive_message(vector<vector<bool>>R){
    vector<int>h(31,1);
    for(int i=0;i<31;i++){
        for(int j=0;j<66;j++){
            if(R[j][i]==0){
                h[i]++;
            }
            else{
                break;
            }
        }
    }
    vector<bool>C(31,1);
    for(int i=0;i<31;i++){
        vector<int>v;
        v.pb(i);
        int sum=0;
        for(int j=0;j<16;j++){
            sum+=h[v.back()];
            v.pb((v.back()+h[v.back()])%31);
        }
        if(sum==31){
            C[i]=0;
        }
    }
    vector<bool>M;
    for(int i=0;i<31;i++){
        if(C[i]==0){
            for(int j=h[i];j<66;j++){
                M.pb(R[j][i]);
            }
        }
    }
    bool last=M.back();
    while(!M.empty()&&M.back()==last){
        M.pop_back();
    }
    return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...