Submission #1234393

#TimeUsernameProblemLanguageResultExecution timeMemory
1234393banganMessage (IOI24_message)C++20
83.31 / 100
427 ms864 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; #define pb push_back void send_message(std::vector<bool> M, std::vector<bool> C) { int N = 31; M.pb(1); int f; for (int i = N-1; 0<=i; i--) if (!C[i]) f=i; assert(f<16); for (int i=0; i<4; i++) send_packet(vector<bool>(N, f>>i&1)); vector<vector<bool>> send; for (int i=0; i<N; i++) { if (i==f) continue; vector<bool> vec(N); vec[f] = C[i]; send.pb(vec); } int p = 0, q = 0; for (int i=0; i < M.size(); i++) { while (C[q] || (p<N-1 && q==f)) { q++; if (q==N) p++, q=0; } if (p==send.size()) send.pb(vector<bool>(N)); send[p][q] = M[i]; q++; if (q==N) p++, q=0; } for (auto vec : send) send_packet(vec); } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int N = 31; auto MAJ = [&](vector<bool> vec) { int cnt[2] {}; for (auto it : vec) cnt[it]++; if (cnt[0]<cnt[1]) return 1; else return 0; }; int f=0; for (int i=0; i<4; i++) f += MAJ(R[i]) << i; R.erase(R.begin(), R.begin() + 4); vector<bool> C(N); for (int i=0, j=0; i<N; i++) { if (i==f) continue; C[i] = R[j++][f]; }; vector<bool> M; for (int i=0; i<R.size(); i++) { for (int j=0; j<N; j++) { if (C[j] || (i<N-1 && j==f)) continue; M.pb(R[i][j]); } } while (!M.back()) M.pop_back(); M.pop_back(); return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...