제출 #41114

#제출 시각아이디문제언어결과실행 시간메모리
41114hsb154앵무새 (IOI11_parrots)C++14
88 / 100
18 ms2432 KiB
#include "encoder.h"
#include "encoderlib.h"

void encode(int N, int M[])
{
	if (N > 32) {
		for (int i = 0; i < N; i++) {
			int mask = 1;
			for (int j = 0; j < 8; j++) {
				int temp = 0;
				temp = temp | (i << 2);
				temp = temp | (j/2);
				if (((M[i] & mask) >> j) != 0) {
					if(j%2==0)
						send(temp);
					else {
						send(temp);
						send(temp);
					}
				}
				mask <<= 1;
			}
		}
	}
	else {
		for (int i = 0; i < N; i++) {
			int mask = 1;
			for (int j = 0; j < 8; j++) {
				int temp = 0;
				temp = temp | (i << 3);
				temp = temp | (j);
				if (((M[i] & mask) >> j) != 0) {

					send(temp);
				}
				mask <<= 1;
			}
		}
	}
}
#include "decoder.h"
#include "decoderlib.h"

void decode(int N, int L, int X[])
{
	if (N > 32) {
		for (int i = 0; i < N; i++) {
			int temp = 0;
			for (int k = 0; k < 4; k++) {
				int cnt=0;
				for (int j = 0; j < L; j++) {
					if ((X[j] >> 2) == i && ((X[j]) & 3) == k) {
						cnt++;
					}
				}
				if (cnt == 1)
					temp |= 1 << (k * 2);
				if (cnt == 2)
					temp |= 2 << (k * 2);
				if (cnt == 3)
					temp |= 3 << (k * 2);
			}
			output(temp);
		}
	}
	else {
		for (int i = 0; i < N; i++) {
			int temp = 0;
			for (int k = 0; k < 8; k++) {
				for (int j = 0; j < L; j++) {
					if ((X[j] >> 3) == i && ((X[j]) & 7) == k) {
						temp = temp | (1 << k);
						break;
					}
				}
			}
			output(temp);
		}
	}
}
#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...