답안 #27723

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
27723 2017-07-13T14:13:16 Z RayaBurong25_1 비교 (balkan11_cmp) C++14
100 / 100
1949 ms 94976 KB
#include "cmp.h"

void remember(int n) {
	// printf("n %d : %d %d %d %d\n", n, 1 + n, 4097 + n/6, 5057 + n/48, 5177 + n/480);
	bit_set(1 + n);
	bit_set(4097 + n/6);
	bit_set(5057 + n/48);
	bit_set(5177 + n/480);
}

int compare(int b) {
	int i;
	if (!bit_get(5177 + b/480))
	{
		// printf("%d\n", 5177 + b/480);
		if (b/480 < 6)
		{
			for (i = b/480 - 1; i >= 0; i--)
			{
				if (bit_get(5177 + i))
					return 1;
			}
			return -1;
		}
		else
		{
			for (i = b/480 + 1; i < 12; i++)
			{
				// printf("%d\n", 5177 + i);
				if (bit_get(5177 + i))
					return -1;
			}
			return 1;
		}
	}
	// printf("a\n");
	if (!bit_get(5057 + b/48))
	{
		// printf("%d\n", 5057 + b/48);
		int c = (b/48)%10;
		// printf("c %d\n", c);
		if (c < 5)
		{
			for (i = c - 1; i >= 0; i--)
			{
				if (bit_get(5057 + b/48 - c + i))
					return 1;
			}
			return -1;
		}
		else
		{
			for (i = c + 1; i < 10; i++)
			{
				// printf("i %d %d\n", i, 5057 + b/48 - c + i);
				if (bit_get(5057 + b/48 - c + i))
					return -1;
			}
			// printf("!\n");
			return 1;
		}
	}
	// printf("b\n");
	if (!bit_get(4097 + b/6))
	{
		int c = (b/6)%8;
		if (c < 4)
		{
			for (i = c - 1; i >= 0; i--)
				if (bit_get(4097 + b/6 - c + i))
					return 1;
			return -1;
		}
		else
		{
			for (i = c + 1; i < 8; i++)
				if (bit_get(4097 + b/6 - c + i))
					return -1;
			return 1;
		}
	}
	// printf("c\n");
	if (!bit_get(1 + b))
	{
		int c = b%6;
		if (c < 3)
		{
			for (i = c - 1; i >= 0; i--)
				if (bit_get(1 + b - c + i))
					return 1;
			return -1;
		}
		else
		{
			for (i = c + 1; i < 6; i++)
				if (bit_get(1 + b - c + i))
					return -1;
			return 1;
		}
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1949 ms 94976 KB Output is correct - maxAccess = 10, score = 100