Submission #1315329

#TimeUsernameProblemLanguageResultExecution timeMemory
1315329ezzzay메시지 (IOI24_message)C++17
0 / 100
365 ms804 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define pb push_back

void send_message(vector<bool> M, vector<bool> C) {
    int x = -1;
    for(int i=0;i<31;i++){
        if(C[i]==0){
            x=i;
            break;
        }
    }

    for(int i=0;i<5;i++){
        vector<bool> v(31);
        bool b = (x>>i)&1;
        for(int j=0;j<31;j++) v[j]=b;
        send_packet(v);
    }

    vector<bool> msg;
    int S = M.size();
    int z = 1025 - S - 1;
    for(int i=0;i<z;i++) msg.pb(0);
    msg.pb(1);
    for(bool b:M) msg.pb(b);

    int ptr = 0;

    for(int i=0;i<31;i++){
        vector<bool> v(31);
        v[x] = C[i];
        for(int j=0;j<31 && ptr<msg.size();j++){
            if(j==x) continue;
            if(C[j]==0){
                v[j]=msg[ptr++];
            }
        }
        send_packet(v);
    }

    while(ptr < msg.size()){
        vector<bool> v(31);
        for(int j=0;j<31 && ptr<msg.size();j++){
            if(C[j]==0){
                v[j]=msg[ptr++];
            }
        }
        send_packet(v);
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    int x=0;
    for(int i=0;i<5;i++){
        int c=0;
        for(int j=0;j<31;j++) c+=R[i][j];
        if(c>=16) x |= (1<<i);
    }

    vector<bool> C(31);
    for(int i=0;i<31;i++){
        C[i]=R[5+i][x];
    }

    vector<bool> msg;
    for(int i=5;i<R.size();i++){
        for(int j=0;j<31;j++){
            if(j!=x && C[j]==0){
                msg.pb(R[i][j]);
            }
        }
    }

    int pos=0;
    while(pos<msg.size() && msg[pos]==0) pos++;
    pos++;

    vector<bool> M;
    for(int i=pos;i<msg.size();i++) M.pb(msg[i]);
    return M;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...