제출 #1186073

#제출 시각아이디문제언어결과실행 시간메모리
1186073gyg메시지 (IOI24_message)C++20
37.74 / 100
415 ms904 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; #define arr array #define vec vector bool bt(int x, int i) { return x & (1 << i); } int wt(int i) { return (1 << i); } void send_message(vec<bool> _vl, vec<bool> _hr) { int sz; vec<int> vl; arr<int, 16> my{}; vec<arr<int, 31>> sn; sz = _vl.size(); for (int i = 0; i <= sz - 1; i++) vl.push_back(_vl[i]); int nx = 0; for (int i = 0; i <= 30; i++) if (!_hr[i]) my[nx++] = i; sn.resize(70 + my[0]); nx = 0; for (int i = 0; i <= 15; i++) { if (i == 0) { for (int j = 0; j <= 10; j++) sn[j][my[i]] = bt(sz, j); for (int j = 11; j <= 15; j++) sn[j][my[i]] = bt(my[i + 1], j - 11); for (int j = 16; j <= 69; j++) { if (nx == sz) continue; sn[j][my[i]] = vl[nx++]; } } else if (i == 15) { for (int j = 0; j <= 69; j++) { if (nx == sz) continue; sn[j][my[i]] = vl[nx++]; } } else { for (int j = 0; j <= 4; j++) sn[j][my[i]] = bt(my[i + 1], j); for (int j = 5; j <= 69; j++) { if (nx == sz) continue; sn[j][my[i]] = vl[nx++]; } } } assert(nx == sz); for (int i = 0; i <= sn.size() - 1; i++) { vec<bool> x; for (int j = 0; j <= 30; j++) x.push_back(sn[i][j]); send_packet(x); } } vec<bool> receive_message(vec<vec<bool>> _sn) { int sz; vec<int> vl; arr<int, 16> my{}; vec<arr<int, 31>> sn; sn.resize(_sn.size()); for (int i = 0; i <= sn.size() - 1; i++) for (int j = 0; j <= 30; j++) sn[i][j] = _sn[i][j]; my[0] = sn.size() - 70; for (int i = 0; i <= 15; i++) { if (i == 0) { for (int j = 0; j <= 10; j++) if (sn[j][my[i]]) sz += wt(j); for (int j = 11; j <= 15; j++) if (sn[j][my[i]]) my[i + 1] += wt(j - 11); for (int j = 16; j <= 69; j++) { if (vl.size() == sz) continue; vl.push_back(sn[j][my[i]]); } } else if (i == 15) { for (int j = 0; j <= 69; j++) { if (vl.size() == sz) continue; vl.push_back(sn[j][my[i]]); } } else { for (int j = 0; j <= 4; j++) if (sn[j][my[i]]) my[i + 1] += wt(j); for (int j = 5; j <= 69; j++) { if (vl.size() == sz) continue; vl.push_back(sn[j][my[i]]); } } } assert(vl.size() == sz); vec<bool> ans; for (int i = 0; i <= sz - 1; i++) ans.push_back(vl[i]); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...