Submission #1213889

#TimeUsernameProblemLanguageResultExecution timeMemory
1213889adaawfMessage (IOI24_message)C++20
100 / 100
390 ms868 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; int dd[105][32], f[105]; void send_message(vector<bool> M, vector<bool> C) { vector<int> v; for (int i = 0; i < 31; i++) { if (C[i] == 0) { v.push_back(i); } f[i] = 0; } v.push_back(v[0] + 31); for (int i = 0; i < v.size() - 1; i++) { int h = v[i + 1] - v[i]; for (int j = 1; j < h; j++) { dd[j][v[i]] = 0; } dd[h][v[i]] = 1; f[v[i]] = h; } M.push_back(1); int z = 0; for (int i = 1; i <= 66; i++) { for (int j = 0; j < 31; j++) { if (i <= f[j]) continue; dd[i][j] = 0; if (C[j] == 1) continue; if (z == M.size()) continue; dd[i][j] = M[z++]; } } for (int i = 1; i <= 66; i++) { vector<bool> v; for (int j = 0; j < 31; j++) { v.push_back(dd[i][j]); } send_packet(v); } } int d[32]; vector<bool> receive_message(vector<vector<bool>> R) { for (int i = 0; i < 31; i++) { int h = 0; for (int j = 0; j < 66; j++) { if (R[j][i] == 1) { h = j + 1; break; } } d[i] = h; } int h = -1; for (int i = 0; i < 31; i++) { if (d[i] == 0) continue; int j = i, l = 0; while (l < 16) { j = (j + d[j]) % 31; l++; if (j == i) break; } if (l == 16 && j == i) { h = i; break; } } vector<int> v; for (int i = 0; i < 16; i++) { v.push_back(h); h = (h + d[h]) % 31; } vector<bool> res; for (int i = 0; i < 66; i++) { for (int w : v) { if (d[w] > i) continue; res.push_back(R[i][w]); } } while (res.back() == 0) res.pop_back(); res.pop_back(); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...