Submission #1194616

#TimeUsernameProblemLanguageResultExecution timeMemory
1194616aykhnMessage (IOI24_message)C++20
81.45 / 100
425 ms848 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); int cur = 0; for (int i = 0; i < 31; i++) { vector<bool> v(31, 0); for (int j = 0; j < 31; j++) { if (j == x || C[j] == 1) continue; v[j] = real[cur++]; } v[x] = C[i]; send_packet(v); } while (cur < 1025) { vector<bool> v(31, 0); for (int j = 0; cur < 1025 && j < 31; j++) { if (C[j] == 1) continue; v[j] = real[cur++]; } 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 ((i >= 35 || 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...