Submission #1194609

#TimeUsernameProblemLanguageResultExecution timeMemory
1194609aykhnMessage (IOI24_message)C++20
69.83 / 100
435 ms852 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; void send_message(vector<bool> M, vector<bool> C) { int x = 0; while (C[x]) x++; for (int i = 0; i < 4; i++) send_packet(vector<bool>(31, x >> i & 1)); vector<bool> real; for (int i = 0; i < 1025 - (int)M.size() - 1; i++) real.push_back(0); real.push_back(1); for (int i = 0; i < M.size(); i++) real.push_back(M[i]); assert(real.size() == 1025); for (int i = 0, j = 0; i < 1025; j++) { vector<bool> v(31, 0); for (int k = 0; i < 1025 && k < 31; k++) { if (k == x || C[k] == 1) continue; v[k] = real[i++]; } if (j < 31) v[x] = C[j]; send_packet(v); } } vector<bool> receive_message(vector<vector<bool>> R) { auto get = [](vector<bool> A) { int cnt = 0; for (int i : A) cnt += i; return cnt >= 16; }; int x = 0; for (int i = 0; i < 4; i++) { if (get(R[i])) x |= (1 << i); } vector<bool> res; int C[31]; for (int i = 4; i < 4 + 31; i++) C[i - 4] = R[i][x]; for (int i = 4; i < R.size(); i++) { for (int j = 0; res.size() < 1025 && j < 31; j++) { if (j != x && C[j] == 0) res.push_back(R[i][j]); } } vector<bool> real; int i = 0; while (res[i] == 0) i++; for (i++; i < res.size(); i++) real.push_back(res[i]); return real; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...