Submission #1246510

#TimeUsernameProblemLanguageResultExecution timeMemory
1246510madamadam3Message (IOI24_message)C++20
81.45 / 100
404 ms852 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; using vb = vector<bool>; using vvb = vector<vb>; const vb ZERO(31, false); const vb ONE(31, true); void trace_vb(vb inp) { for (int i = 0; i < (int) inp.size(); i++) { cout << (inp[i] ? "1 " : "0 "); } cout << "\n"; } void send_message(vb M, vb C) { vector<int> bits; for (int i = 0; i < 31; i++) if (!C[i]) bits.push_back(i); for (int i = 0; i < 5; i++) { vb to_send(31); for (int bit = 0; bit < 16; bit++) { int nxt = bit == 15 ? 0 : bit + 1; to_send[bits[bit]] = bits[nxt] & (1 << i); } send_packet(to_send); } int cidx = 0; for (int i = 5; i < 70; i++) { vb packet(31); for (int j = 0; j < 16; j++) { if (cidx == M.size()) packet[bits[j]] = 1; else if (cidx > M.size()) packet[bits[j]] = 0; else packet[bits[j]] = M[cidx]; cidx++; } send_packet(packet); } } vb receive_message(vvb R) { vector<int> nxt(31, 0); for (int i = 0; i < 5; i++) { for (int j = 0; j < 31; j++) { nxt[j] |= R[i][j] << i; } } vector<int> bits; for (int i = 0; i < 31; i++) { int cur = i; vector<int> trial; while (trial.size() < 16 && !count(trial.begin(), trial.end(), cur) && cur != 31) { trial.push_back(cur); cur = nxt[cur]; } if (trial.size() == 16 && nxt[trial.back()] == i) { bits = trial; break; } } vb ans; for (int i = 5; i < R.size(); i++) { for (int j = 0; j < 16; j++) { ans.push_back(R[i][bits[j]]); } } while (!ans.back()) ans.pop_back(); ans.pop_back(); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...