Submission #1185191

#TimeUsernameProblemLanguageResultExecution timeMemory
1185191khusanov45Message (IOI24_message)C++20
0 / 100
58 ms800 KiB
#include <vector> #include "message.h" using namespace std; void send_message(std::vector<bool> M, std::vector<bool> C) { vector<int> rindex; for (int i = 0; i != 31; ++i){ if (C[i]) { rindex.push_back(i); } } int first_index = rindex.front(); for (int i = 0; i < 5; ++i) { send_packet(vector<bool>(31, (first_index>>i) & 1)); } rindex.erase(rindex.begin()); int id = 0; for (int i =0; i != 31 && id < M.size(); ++i){ vector<bool> package(31, 0); package[first_index] = C[i]; for (int x : rindex){ package[x] = M[id++]; } send_packet(package); } while (id < M.size()) { vector<bool> packet(31, 0); for (int x : rindex) { int next = id < M.size() ? M[id++] : 0; packet[x] = next; } } vector<bool> sizePacket(31, 0); for (int i = 0; i < 16; ++i) { sizePacket[rindex[i]] = (M.size() >> i) & 1; } send_packet(sizePacket); } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int first_index = 0; for (int i = 0; i < 5; ++i) { int oc = 0; for (auto it : R[i]){ oc += it; } oc = oc >= 16 ? 1 : 0; first_index += (1 << i) * oc; } R.erase(R.begin(), R.end()+5); vector<int> rindex; for (int i = 0; i < 31; ++i) { if (R[i][first_index] == 1){ rindex.push_back(i); } } vector<bool> output; int l = 0; for (int i = 0; i + 1 < R.size(); ++i){ int id = (i< 31)?1:0; for (;id < rindex.size(); ++id){ output[l++] = R[i][id]; } } int sz; for (int i = 0; i < 16; ++i) { sz += ((R.back()[rindex[i]]) << i); } output.resize(sz); return output; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...