제출 #1303313

#제출 시각아이디문제언어결과실행 시간메모리
1303313kawhiet메시지 (IOI24_message)C++20
28.35 / 100
552 ms828 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; void send_message(vector<bool> a, vector<bool> c) { vector<int> zeros; for (int i = 0; i < 31; i++) { vector<bool> cur(31, c[i]); if (c[i] == 0) { zeros.push_back(i); } send_packet(cur); } int n = a.size(); int left = n; int i = 15; for (; i < n; i += 16) { left -= 16; vector<bool> cur(31); int k = 0; for (int j = i - 15; j <= i; j++) { cur[zeros[k++]] = a[j]; } send_packet(cur); } i -= 16; int f = left; vector<bool> cnt(31); for (auto j : zeros) { if (left == 0) break; cnt[j] = 1; left--; } send_packet(cnt); i++; vector<bool> finisher(31); int k = 0; for (; i < a.size(); i++) { if (f == 0) break; f--; finisher[zeros[k++]] = a[i]; } send_packet(finisher); } vector<bool> receive_message(vector<vector<bool>> r) { vector<bool> correct(31); vector<int> zeros; for (int i = 0; i < 31; i++) { int one = count(r[i].begin(), r[i].end(), 1); int zero = 31 - one; if (one > zero) { correct[i] = 1; } else { correct[i] = 0; zeros.push_back(i); } } int n = r.size(); vector<bool> ret; for (int i = 31; i < n - 2; i++) { auto a = r[i]; for (auto j : zeros) { ret.push_back(a[j]); } } int cnt = 0; for (auto i : zeros) { cnt += r[n - 2][i]; } for (auto i : zeros) { if (cnt == 0) break; cnt--; ret.push_back(r[n - 1][i]); } return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...