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 "encoder.h"
#include "encoderlib.h"
void encode(int n, int m[]) {
if (n > 32) {
for (int i = 0, j; i < n; i++) {
for (j = 0; j < 4; j++) {
if (m[i] & (1 << j)) {
send((i << 2) + j);
}
}
for (j = 4; j < 8; j++) {
if (m[i] & (1 << j)) {
send((i << 2) + j - 4);
send((i << 2) + j - 4);
}
}
}
}
else {
for (int i = 0, j; i < n; i++) {
for (j = 0; j < 8; j++) {
if (m[i] & (1 << j)) {
send((i << 3) + j);
}
}
}
}
}
/**
* N <= 32:
* IIIIIPPP
* I - index
* P - position
*
* N > 32:
* IIIIIIPP
* I - index
* P - position
* If present once, pos = PP
* If present twice, pos = PP + 4
* If present thrice, pos = {PP, PP + 4}
**/
#include "decoder.h"
#include "decoderlib.h"
#include <vector>
void decode(int n, int l, int x[]) {
std::vector <int> m(n, 0);
if (n > 32) {
for (int i = 0; i < l; i++) {
if (m[x[i] >> 2] & (1 << (x[i] & 3))) {
m[x[i] >> 2] &= ~(1 << (x[i] & 3));
m[x[i] >> 2] |= 1 << ((x[i] & 3) + 4);
}
else {
m[x[i] >> 2] |= 1 << (x[i] & 3);
}
}
}
else {
for (int i = 0; i < l; i++) {
m[x[i] >> 3] |= 1 << (x[i] & 7);
}
}
for (int &i : m) {
output(i);
}
}
/**
* N <= 32:
* IIIIIPPP
* I - index
* P - position
*
* N > 32:
* IIIIIIPP
* I - index
* P - position
* If present once, pos = PP
* If present twice, pos = PP + 4
* If present thrice, pos = {PP, PP + 4}
**/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |