답안 #42851

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
42851 2018-03-05T06:06:57 Z kinssang 비교 (balkan11_cmp) C++14
100 / 100
2063 ms 102252 KB
#include "cmp.h"

void remember(int n)
{
	n += 4096;

	while (n > 1)
	{
		bit_set(n);
		n >>= 2;
	}
}

int compare(int b)
{
	b += 4096;

	int low = 0, high = 6;

	while (low <= high)
	{
		int mid = (low + high) / 2;

		if (mid == 6)
		{
			high = mid - 1;
			continue;
		}

		int temp = bit_get(b >> (2*mid));

		if (temp == 1) high = mid - 1;
		else low = mid + 1;
	}

	if (high + 1 == 0) return 0;
	
	if (b >> (2*high) == ((b >> (2*high+2)) * 4)) return -1;
	if (b >> (2*high) == ((b >> (2*high+2)) * 4 + 3)) return 1;

	if (b >> (2*high) == ((b >> (2*high + 2)) * 4 + 1)) return bit_get((b >> (2*high + 2)) * 4) ? 1 : -1;
	if (b >> (2*high) == ((b >> (2*high + 2)) * 4 + 2)) return bit_get((b >> (2*high + 2)) * 4 + 3) ? -1 : 1;
}

Compilation message

cmp.cpp: In function 'int compare(int)':
cmp.cpp:43:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2063 ms 102252 KB Output is correct - maxAccess = 10, score = 100