제출 #1184778

#제출 시각아이디문제언어결과실행 시간메모리
1184778Seb메시지 (IOI24_message)C++20
0 / 100
224 ms844 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; typedef long long ll; void send_message(std::vector<bool> M, std::vector<bool> C) { for (int i = 0; i < 31; i++) C[i] = !C[i]; vector<bool> A(31, false), B(31, true); for (int i = 0; i < 31; i++) { if (C[i] == false) send_packet(A); else { send_packet(B); break; } } ll idx = 0, aux_idx = 0; while (C[idx] == false) idx++; aux_idx = idx + 1; while (idx < 30) { A = vector<bool> (31, false); for (int i = 0; i <= idx; i++) if (C[i]) if (aux_idx < 31) A[i] = C[aux_idx++]; idx = aux_idx - 1; send_packet(A); } A = vector<bool> (31, false); ll SZ = M.size(); for (int i = 0; i < 31; i++) { if (C[i]) { A[i] = ((SZ%2 == 0) ? false : true); SZ /= 2; } send_packet(A); } idx = 0; while (idx < M.size()) { A = vector<bool> (31, false); for (int i = 0; i < 31; i++) if (C[i]) A[i] = M[idx++]; send_packet(A); } return; } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { vector<bool> C(31, false), V; ll idx = 0, SZ = 0; for (auto &it : R) { ll cnt = 0; for (int i = 0; i < 31; i++) { if (it[i]) cnt++; if (C[i]) V.push_back(it[i]); } if (idx < 31) { if (V.empty()) C[idx++] = ((cnt > 15) ? true : false); else for (int i = 0; i < V.size(); i++) if (idx < 31) C[idx++] = V[i]; V.clear(); } if (idx == 31) { ll aux = 1; for (int i = 0; i < V.size(); i++) { SZ += aux*(V[i] == true ? 1 : 0); aux *= 2; } V.clear(); idx++; } } while (V.size() > SZ) V.pop_back(); return V; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...