Submission #1204255

#TimeUsernameProblemLanguageResultExecution timeMemory
1204255bynixMessage (IOI24_message)C++20
66.34 / 100
433 ms852 KiB
#include "bits/stdc++.h" #include "message.h" using namespace std; typedef vector<bool> vb; void send_message(vb M, vb C){ bool short_message = (M.size() != 1024); vector<int> id(16, 0); int c = 0; for (int i = 0; i < 31; i++) if (!C[i]) id[c] = i, c++; vb ones(31, 1), zeroes(31, 0); map<int, vb> m = {{0, zeroes}, {1, ones}}; for (int i = 0; i < 5; i++) send_packet(m[(id[0] >> i) & 1]); for (int i = 0; i < 5; i++){ vb packet(31, 0); for (int j = 0; j < 15; j++) packet[id[j]] = (id[j + 1] >> i) & 1; if (i == 0) packet[id[15]] = short_message; send_packet(packet); } if (short_message){ int l = M.size(); M.push_back(1); for (int i = 0; i < 1024 - l; i++) M.push_back(0); } for (int i = 0; i < 1024; i += 16){ vb packet(31, 0); for (int j = i; j < i + 16; j++) packet[id[j - i]] = M[j]; send_packet(packet); } } vb receive_message(vector<vb> R){ vector<int> id(16, 0); for (int i = 0; i < 5; i++){ int o = 0; for (int j = 0; j < 31; j++) o += R[i][j]; id[0] |= ((o > 15) << i); } for (int j = 1; j < 16; j++) for (int k = 0; k < 5; k++) id[j] |= (R[k + 5][id[j - 1]] << k); bool short_message = R[5][id[15]]; vb M(1024, 0); int l = 0; for (int i = 0; i < 64; i++) for (int j = 0; j < 16; j++){ M[i*16 + j] = R[i + 10][id[j]]; l = M[i*16 + j] ? (i*16 + j) : l; } if (short_message) { vb M2(l, 0); for (int i = 0; i < l; i++) M2[i] = M[i]; return M2; } else return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...