# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1107959 | sleepntsheep | Message (IOI24_message) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "message.h"
void send_message(std::vector<bool> M, std::vector<bool> C) {
int d[16] = { 0 }, g[16] = { 0 }, z = 0, buf[2000], y = 0;
for (int j = 0, i = 0; i < 31; ++i) if (!C[i]) g[j++] = i;
for (int i = 0; i < 15; ++i) d[i] = g[i + 1] - g[i];
d[15] = 32 - g[15] + g[0];
for (int i = 0; i < 10; ++i) buf[y++] = ((int)M.size() >> i) & 1;
for (int x : M) buf[y++] = x;
for (int i = 0; i < 67; ++i) {
std::vector<bool> p(31);
for (int k = 0, ii; k < 16; ++k) {
ii = g[k];
if (i + 1 == d[k])
p[ii] = 1;
else if (i + 1 < d[k])
p[ii] = 0;
else
p[ii] = buf[z++];
}
send_packet(p);
}
}
std::vector<int> g[31];
int head, tail, par[31], vis[31];
int cycle(int u, int p) {
vis[u] = 1;
par[u] = p;
for (int v : g[u]) {
if (!vis[v]) {
if (cycle(v, u)) return 1;
} else {
head = u; tail = v;
return 1;
}
}
return 0;
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R) {
int d[31] = { 0 }, g[16], e[31] = { 0 }, S = 0, z = 0, buf[2000];
for (int i = 0; i < 31; ++i) vis[i] = 1;
for (int i = 0; i < 67; ++i) {
for (int j = 0; j < 31; ++j) {
if (!d[j] && R[i][j] == 1) {
d[j] = (j + i + 1) % 31;
g[j].push_back(d[j]);
g[d[j]].push_back(j);
}
}
}
for (int i = 0, p = 0; i < 31; ++i) if (!vis[i] && cycle(i, i)) {
for (int c = head; c != tail; c = par[c]) g[p++] = c;
g[p++] = tail;
}
for (int i = 0; i < 16; ++i) e[g[i]] = -1;
for (int i = 0; i < 67; ++i) {
for (int j = 0; j < 31; ++j) {
if (e[j] && d[j] <= i) {
buf[z++] = R[i][j];
}
}
}
for (int i = 0; i < 10; ++i) S |= buf[z++] << i;
std::vector<bool> M(S);
for (int &x : M) x = buf[z++];
return M;
}