제출 #1342775

#제출 시각아이디문제언어결과실행 시간메모리
1342775vjudge1Message (IOI24_message)C++20
73.51 / 100
422 ms820 KiB
#include "message.h"
using namespace std;
void send_message(std::vector<bool> M, std::vector<bool> C) {
    vector<int> my;
    for (int i = 0 ; i < 31; i++){
        if (C[i] == 0) my.push_back(i);
    }
    for (int i = 0; i < 5; i++){
        vector<bool> v(31, 0);
        int val = my[0] & (1<<i);
        if (val != 0) val = 1;
        for (auto el : my) v[el] = val;
        send_packet(v);
    }
    int s = M.size();
    vector<vector<bool>> le(67,vector<bool>(31, 0));
    int cur = 0;
    for (int i = 0; i < 67; i++){
        if (i < 31){
            le[i][my[0]] = C[i];
        }
        else if (i < 42){
            int val = s & (1<<(i - 31));
            if (val != 0) val = 1;
            le[i][my[0]] = val;
        }
        int st = 0;
        if (i < 42) st = 1;
        for (int j = st; j < my.size(); j++){
            le[i][my[j]] = M[cur];
            cur++;
            cur = min(cur, s - 1);
        }
    }
    for (int i = 0; i < 67; i++){
        send_packet(le[i]);
    }
}

std::vector<bool> receive_message(std::vector<std::vector<bool>> r){
    vector<int> my;
    int fop = 0;
    for (int i = 0; i < 5; i++){
        int c0 = 0, c1 = 0;
        for (int j = 0; j < 31; j++){
            if (r[i][j] == 0) c0++;
            else c1++;
        }
        if (c1 > c0) fop += (1<<i);
    }
    for (int i = 5; i < 36; i++){
        if (r[i][fop] == 0){
            my.push_back(i - 5);
        }
    }
    int s = 0;
    for (int i = 36; i < 47; i++){
        if (r[i][fop] == 1) s += (1<<(i - 36));
    }
    vector<bool> ans;
    for (int i = 5; i < 72; i++){
        int st = 0;
        if (i < 47) st = 1;
        for (int j = st; j < my.size(); j++){
            if (ans.size() == s) break;
            ans.push_back(r[i][my[j]]);
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...