Submission #717823

#TimeUsernameProblemLanguageResultExecution timeMemory
717823EntityPlanttParrots (IOI11_parrots)C++14
88 / 100
9 ms1368 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...