importsysdefsolution(N:int,r:int,c:int)->None:answer=0defquad_tree(n:float,x:float,y:float)->None:nonlocalanswer# (r, c) 좌표가 있는 곳을 찾아내서 존재하면 출력 후 프로그램 종료
ifr==xandc==y:print(int(answer))exit(0)# 현재 처리하고 있는 사각형의 영역이 (r, c) 좌표를 포함하지 않는지 확인
ifnot(x<=r<x+nandy<=c<y+n):# 현재 사각형의 크기(n)를 제곱하여 계쏙 answer에 누적시킴
# 이건 현재 사각형을 더 이상 나눌 필요가 없는 경우,
# (r, c)를 포함하지 않는 사각형의 크기를 누적하여 해당 사각형을 건너뛰게 만드는 역할을 함
answer+=n*nreturn# 쿼드 트리 알고리즘 사용하여 4개의 작은 사각형(사분면)으로 나눔
# 호출할 때마다 n을 절반으로 줄임
mid=n/2quad_tree(mid,x,y)quad_tree(mid,x,y+mid)quad_tree(mid,x+mid,y)quad_tree(mid,x+mid,y+mid)quad_tree(2**N,0,0)N,r,c=map(int,sys.stdin.readline().rstrip().split())solution(N,r,c)
Leave a comment