제출 #1133400

#제출 시각아이디문제언어결과실행 시간메모리
1133400TAhmed33메시지 (IOI24_message)C++20
40.65 / 100
459 ms860 KiB
#include "message.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; #pragma GCC optimize ("Ofast") const int B = 31; void send_message (vector <bool> m, vector <bool> c) { int u = 0, v = 0; vector <int> z; for (int i = 0; i < (int)c.size(); i++) { send_packet(vector <bool> (B, c[i])); if (!c[i]) { z.push_back(i); } u += c[i]; v += !c[i]; if (u == 15) { break; } if (v == 2) { for (int j = i + 1; j < (int)c.size(); j += 2) { vector <bool> t(B, false); t[z[0]] = c[j]; if (j != (int)c.size() - 1) { t[z[1]] = c[j + 1]; } send_packet(t); } break; } if (v == 16) { break; } if (v == 15 && i == (int)c.size() - 2) { break; } } bool flag = 0; if (m.back() == 0) { flag = 1; for (int i = 0; i < (int)m.size(); i++) { m[i] = !m[i]; } } int ii[16], x = 0; for (int i = 0; i < B; i++) { if (!c[i]) { ii[x++] = i; } } for (int i = 0; i < (int)m.size(); i += 16) { vector <bool> e(B, false); for (int j = i; j < min((int)m.size(), i + 16); j++) { e[ii[j - i]] = m[j]; } send_packet(e); } send_packet(vector <bool> (B, flag)); return; } int majority (vector <bool> &x) { int c[2] = {}; for (auto i : x) { c[i]++; } if (c[0] < c[1]) return 1; else return 0; } vector <bool> receive_message (vector <vector <bool>> R) { int C[B] = {}; int u = 0, v = 0; int ind = -1; vector <int> z; for (int i = 0; i < B; i++) { C[i] = majority(R[i]); if (!C[i]) { z.push_back(i); } u += C[i]; v += !C[i]; ind = i; if (u == 15 || (v == 15 && i == B - 2)) { for (int j = i + 1; j < B; j++) { C[j] = 0; } break; } if (v == 2) { int x = ind + 1; while (x < B) { ind++; C[x] = R[ind][z[0]]; if (x != B - 1) { C[x + 1] = R[ind][z[1]]; } x += 2; } break; } if (v == 16) { for (int j = i + 1; j < B; j++) { C[j] = 1; } break; } } vector <bool> m; for (int i = ind + 1; i + 1 < (int)R.size(); i++) { for (int j = 0; j < B; j++) { if (!C[j]) m.push_back(R[i][j]); } } while (m.back() == 0) { m.pop_back(); } if (majority(R.back())) { for (int i = 0; i < (int)m.size(); i++) { m[i] = !m[i]; } } return m; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...