각 쿼리 Q[i]에 삼중항 [a_i, b_i 및 d_i]이 포함된 쿼리 Q 목록이 있다고 가정합니다. 우리가 처음에 위치 (0, 0)에 있다고 가정하면 한 단계에서 어떤 위치 (x1, y1)에서 (x2, y2)로 이동할 수 있습니다. 여기서 이 두 점 사이의 유클리드 거리는 최소 a와 최대 b입니다. 이제 각 쿼리에 대해 (0, 0)에서 (d_i, 0)에 도달하는 데 필요한 최소 단계 수를 찾아야 합니다.
따라서 입력이 Q =[(2,3,1), (1,2,0), (3,4,11)]과 같으면 출력은 [2, 0, 3]이 됩니다. a =2인 (0, 0)의 첫 번째 쿼리는 $\left(\frac{1}{2},\frac{\sqrt{15}}{2}\right)$ 다음 (1, 0) 따라서 두 단계가 필요하므로 출력은 2입니다. 다음 쿼리의 경우 d는 0이므로 단계를 이동할 필요가 없으므로 출력은 0입니다. 그리고 세 번째 쿼리의 경우 b =4 및 a =3으로 이동(0, 0 ) ~ (4, 0) 다음 (8, 0) 다음 (11, 0).
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- steps() 함수를 정의합니다. 이것은, b, d 가 걸립니다.
- mmin :=최소값, b
- mmax :=최대값, b
- d가 0이면
- 0을 반환
- d가 mmin 또는 mmax이면
- 1을 반환
- d
- 2 반환
- (a, b, d) :=q
- res 끝에 단계(a, b, d)의 결과 삽입
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from math import ceil def steps(a, b, d): mmin = min(a, b) mmax = max(a, b) if d is 0: return 0 if d in [mmin, mmax]: return 1 if d < mmax: return 2 return ceil(d / mmax) def solve(Q): res = [] for q in Q: a, b, d = q res.append(steps(a, b, d)) return res Q = [(2,3,1), (1,2,0), (3,4,11)] print(solve(Q))
입력
[(2,3,1), (1,2,0), (3,4,11)]
출력
[2, 0, 2.0]