제출 #717822

#제출 시각아이디문제언어결과실행 시간메모리
717822EntityPlantt앵무새 (IOI11_parrots)C++14
52 / 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; i < n; i++) {
            send((i << 4) | 0 | ((m[i] >> 0) & 3));
            send((i << 4) | 4 | ((m[i] >> 2) & 3));
            send((i << 4) | 8 | ((m[i] >> 4) & 3));
            send((i << 4) | 12 | ((m[i] >> 6) & 3));
        }
    }
}
/**
 * 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++) {
            switch (x[i] & 12) {
                case 0: m[x[i] >> 4] |= (x[i] & 3) << 0; break;
                case 4: m[x[i] >> 4] |= (x[i] & 3) << 2; break;
                case 8: m[x[i] >> 4] |= (x[i] & 3) << 4; break;
                case 12: m[x[i] >> 4] |= (x[i] & 3) << 6; break;
            }
        }
    }
    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...