Submission #1236186

#TimeUsernameProblemLanguageResultExecution timeMemory
1236186banganMessage (IOI24_message)C++20
100 / 100
445 ms848 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; #define pb push_back const int N = 31; const int K = 66; void send_message(std::vector<bool> M, std::vector<bool> C) { M.pb(1); vector<int> d(N); for (int i=0; i<N; i++) if (!C[i]) { for (int j=1; j<N; j++) if (!C[(i+j) % N]) { d[i] = j-1; break; } } vector<vector<bool>> col(N); for (int i=0; i<N; i++) if (!C[i]) { int x = d[i]; while (x--) col[i].pb(0); col[i].pb(1); } int p=0, q=0; for (int x : M) { while (C[q] || p+1 <= col[q].size()) { q++; if (q==N) q=0, p++; } col[q].pb(x); // assert(col[q].size()==p+1); } // assert(p<K); for (int i=0; i<N; i++) while (col[i].size()<K) col[i].pb(0); for (int i=0; i<K; i++) { vector<bool> pac; for (int j=0; j<N; j++) pac.pb(col[j][i]); send_packet(pac); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { vector col(N, vector<bool>(K)); for (int i=0; i<N; i++) for (int j=0; j<K; j++) col[i][j] = R[j][i]; for (int i=0; i<N; i++) reverse(col[i].begin(), col[i].end()); vector<int> d(N); for (int i=0; i<N; i++) { while (!col[i].empty() && !col[i].back()) col[i].pop_back(), d[i]++; if (!col[i].empty()) col[i].pop_back(); } auto test = [&](int i) -> vector<bool> { vector<bool> ret(N, 1); while (ret[i]) { ret[i] = 0; i = (i + d[i] + 1) % N; } if (count(ret.begin(), ret.end(), 0)==16) return ret; else return {}; }; vector<bool> C; for (int i=0; C.empty(); i++) { vector<bool> res = test(i); if (res.size()==N) C = res; } // assert(count(C.begin(), C.end(), 0)==16); vector<bool> M; int p = K-1, q=0; while (0<=p) { while (C[q] || col[q].size() < p+1) { q++; if (q==N) q=0, p--; } if (0<=p) { // assert(col[q].size()==p+1); M.pb(col[q].back()); col[q].pop_back(); } } while (!M.back()) M.pop_back(); M.pop_back(); return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...