Submission #1317166

#TimeUsernameProblemLanguageResultExecution timeMemory
1317166spetrMessage (IOI24_message)C++20
0 / 100
348 ms812 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; #define ll long long const ll mmod = 998244353; #define vl vector<long long> #define vll vector<vector<long long>> #define pl pair<long long, long long> #define vb vector<bool> void send_message(std::vector<bool> M, std::vector<bool> C){ reverse(M.begin(), M.end()); M.push_back(1); while (M.size() < 1025){ M.push_back(0); } reverse(M.begin(), M.end()); vector<vector<bool>> packets(66, vector<bool> (31, 0)); vl depth(31, 0); for (ll i = 0; i < 31; i++){ ll j = 1; if (!C[i]){ while (C[(i+j)%31] == true){ j++; } packets[j-1][i] = 1; depth[i] = j; } } ll p = 0; for (ll i = 0; i < 31; i++){ if (!C[i]){ for (ll j = depth[i]; j < 66; j++){ if (p < M.size()) { packets[j][i] = M[p]; p++; } } } } for (ll i = 0; i < 66; i++){ send_packet(packets[i]); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R){ vl pointer(31, -1); vl depth(31, 0); for (ll i = 0; i < 31; i++){ for (ll j = 0; j < 66; j++){ if (R[j][i]){ if (pointer[i] == -1){ pointer[i] = (i+j+1)%31; depth[i] = j+1; } } } } set<ll> c; for (ll i = 0; i < 31; i++){ if (pointer[i] == -1) continue; c.clear(); ll pos = i; bool ok = true; for (ll j = 0; j < 16; j++){ c.insert(pos); if (pointer[pos] == -1) { ok = false; break; } pos = pointer[pos]; } if (ok && pointer[pos] == i && c.size() == 16){ break; } } vector<bool> m; for (auto x: c){ for (ll i = depth[x]; i < 66; i++){ m.push_back(R[i][x]); } } vector<bool> M; ll p = 0; while (p < m.size() && m[p] == 0){ p++; } p++; for (ll i = p; M.size() < 1025 && i < m.size(); i++){ M.push_back(m[i]); } if (M.size() < 1025) M.resize(1025, 0); return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...