문제 링크 : https://www.acmicpc.net/problem/1074
분할 정복과 재귀를 사용해서 푸는 문제이다.
배열의 크기가 2^15 x 2^15까지 커질 수 있기 때문에 모든 경우를 탐색하면 시간 초과가 뜬다. 따라서 사각형을 4개로 쪼갠 뒤에 r행 c열이 존재하는 사각형 외의 나머지 3개의 사각형은 재귀를 통해 탐색을 진행하면 안 된다.
from sys import stdin
n, r, c = map(int,stdin.readline().split())
cnt = 0
result = -1
def divAndCon(x,y,length):
global r, c, result, cnt
if length == 1:
result = cnt
else:
parameter = [(x,y,length // 2), (x, y + length // 2, length // 2), (x + length // 2, y, length // 2), (x + length // 2, y + length // 2, length // 2)]
ordCount = -1
for i in parameter:
nx, ny, nl = i
ordCount += 1
if nx <= r < nx + nl and ny <= c < ny + nl:
cnt += (nl ** 2) * ordCount
divAndCon(nx,ny,nl)
divAndCon(0,0,2 ** n)
print(result)