defcal(x, y): b = y - x return (-b + (b ** 2 + 4) ** 0.5) / 2 - x
defdfs(x, y, fx, fy): if fx > N or fy > M: return size = cal(x, y) global min_size if fx == N and fy == M and size < min_size: min_size = size dfs(x + size, y, fx + 1, fy) dfs(x, y + size, fx, fy + 1)
dfs(1, 0, 0, 0) st = [(1, 0)] whilelen(st) > 0: x, y = st.pop() size = cal(x, y) if size > min_size: ans += 1 st.append((x + size, y)) st.append((x, y + size)) print(ans)