제출 #1190285

#제출 시각아이디문제언어결과실행 시간메모리
1190285NotLinux메시지 (IOI24_message)C++20
43.96 / 100
488 ms860 KiB
#include "message.h" #include<bits/stdc++.h> using namespace std; void send_message(vector<bool> M, vector<bool> C) { vector<bool> c(31, 1); for (int i = 0;i < 16;i++) { vector<bool> A(31, C[i]); c[i] = C[i]; send_packet(A); } int now = 16; while (now < 31) { vector<bool> A(31, 0); vector<bool> cc(c); for (int i = 0;i < 31;i++) { if (cc[i] == 0) { c[now] = C[now]; A[i] = C[now++]; if (now >= 31) break; } } send_packet(A); } int n = M.size(); { vector<bool> A(31, 0); int now = 0; for (int j = 0;j < 31;j++) { if (C[j] == 0) { A[j] = (n >> now) & 1; now++; } } send_packet(A); } now = 0; while (now < n) { vector<bool> A(31, 0); for (int j = 0;j < 31;j++) { if (C[j] == 0) { A[j] = M[now++]; if (now == n) break; } } send_packet(A); } } vector<bool> receive_message(vector<vector<bool>> R) { vector<bool> ans; vector<bool> C(31, 1); for (int i = 0;i < 16;i++) { int cnt0 = 0, cnt1 = 0; for (bool x : R[i]) { if (x) cnt1++; else cnt0++; } C[i] = cnt1 > cnt0; } int idx = 16; int now = 16; while (now < 31) { vector<bool> cc(C); for (int i = 0;i < 31;i++) { if (cc[i] == 0) { C[now++] = R[idx][i]; if (now >= 31) break; } } idx++; } int n = 0; { int now = 0; for (int j = 0;j < 31;j++) { if (C[j] == 0) { n += R[idx][j] << now; now++; } } idx++; } for (int i = idx;i < (int)R.size();i++) { for (int j = 0;j < 31;j++) { if (C[j] == 0) { ans.push_back(R[i][j]); if ((int)ans.size() == n) break; } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...