Submission #1212060

#TimeUsernameProblemLanguageResultExecution timeMemory
1212060vanea메시지 (IOI24_message)C++20
77.38 / 100
432 ms848 KiB
#include <bits/stdc++.h>
#include "message.h"
using namespace std;
using ll = long long;

/*vector<vector<bool>> R;

void send_packet(vector<bool> a) {
    R.push_back(a);
}*/

void send_message(vector<bool> M, vector<bool> C) {
    vector<bool> a, b;
    for(int i = 0; i < 31; i++) {
        a.push_back(1);
        b.push_back(0);
    }
    int idx;
    for(int i = 0; i < 31; i++) {
        if(C[i]) continue;
        idx = i;
        break;
    }
    for(int i = 0; i < 5; i++) {
        if(idx & (1 << i)) {
            send_packet(a);
        }
        else {
            send_packet(b);
        }
    }
    int idx1 = 0;
    reverse(M.begin(), M.end());
    M.push_back(1);
    while(M.size() != 1026) M.push_back(0);
    reverse(M.begin(), M.end());
    int cnt = 0;
    int s = M.size();
    while(idx1 < s) {
        vector<bool> now;
        for(int i = 0; i < 31; i++) {
            if(C[i]) {
                now.push_back(0);
                continue;
            }
            if(i == idx) {
                if(cnt >= 30) {
                    now.push_back(M[idx1++]);
                }
                else {
                    now.push_back(C[cnt+(cnt>=idx)]);
                }
                continue;
            }
            now.push_back(M[idx1++]);
        }
        send_packet(now);
        ++cnt;
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    int s = 0;
    vector<bool> ans;
    for(int i = 0; i < 31; i++) ans.push_back(1);
    int idx = 0;
    for(int i = 0; i < 5; i++) {
        int cnt = 0;
        for(int j = 0; j < 31; j++) {
            cnt += R[i][j];
        }
        if(cnt >= 16) idx |= (1 << i);
    }
    int idx1 = 0;
    for(int i = 5; i < 35; i++) {
        if(idx1 == idx) idx1++;
        ans[idx1] = 1-R[i][idx];
        ++idx1;
    }
    vector<bool> res;
    for(int i = 5; i < 35; i++) {
        for(int j = 0; j < 31; j++) {
            if(ans[j] && j != idx) res.push_back(R[i][j]);
        }
    }
    for(int i = 35; i < 71; i++) {
        for(int j = 0; j < 31; j++) {
            if(ans[j]) res.push_back(R[i][j]);
        }
    }
    vector<bool> real_ans;
    int i;
    for(i = 0; i < res.size(); i++) {
        if(res[i] == 1) break;
    }
    ++i;
    for(i; i < res.size(); i++) real_ans.push_back(res[i]);
    return real_ans;
}

/*int main()
{
    send_message({0, 1, 1, 0}, {1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0});
    vector<bool> ans = receive_message(R);
    for(auto it : ans) {
        cout << it << ' ';
    }
    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...