Submission #1189551

#TimeUsernameProblemLanguageResultExecution timeMemory
1189551raspyMessage (IOI24_message)C++20
77.38 / 100
403 ms824 KiB
#include "message.h" using namespace std; void send_message(vector<bool> m, vector<bool> c) { int M = m.size(); while (m.size() < 1024) m.push_back(false); int n = c.size(); vector<int> poznani; for (int i = 0; i < n; i++) if (c[i] == 0) poznani.push_back(i); vector<bool> a(n, false); for (int j = 0; j < 4; j++) { if (poznani[0]>>j&1) a = vector<bool>(n, true); else a = vector<bool>(n, false); send_packet(a); } int ix = poznani[0]+1; for (int i = 0; i < 1024;) { if (ix < 31) { for (int j = 0; j < 15; j++) a[poznani[j+1]] = m[j+i]; a[poznani[0]] = !c[ix]; ix++; i+=15; } else { for (int j = 0; j < 16; j++) a[poznani[j]] = m[j+i]; i+=16; } send_packet(a); } a = vector<bool>(n, false); for (int j = 0; j < 16; j++) if (M>>j&1) a[poznani[j]] = true; send_packet(a); } vector<bool> receive_message(vector<vector<bool>> r) { int prvi_ix = 0; for (int i = 0; i < 4; i++) { int stb = 0; for (bool v : r[i]) stb += (v ? 1 : 0); if (stb >= 16) prvi_ix += (1 << i); } vector<int> poznani; poznani.push_back(prvi_ix); int ix = poznani[0]+1; for (int i = 4; ix < 31; i++) { if (r[i][poznani[0]]) poznani.push_back(ix); ix++; } ix = poznani[0]+1; vector<bool> message; for (int i = 4; i < r.size()-1; i++) { if (ix < 31) { for (int j = 0; j < 15; j++) message.push_back(r[i][poznani[j+1]]); ix++; } else { for (int j = 0; j < 16; j++) message.push_back(r[i][poznani[j]]); } } int M = 0; for (int j = 0; j < 16; j++) if (r.back()[poznani[j]]) M += (1 << j); vector<bool> rez; for (int i = 0; i < M; i++) rez.push_back(message[i]); return rez; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...