차원 a, b, c의 큐브가 여러 개 있고 이를 사용하여 axbxc 차원의 새 상자가 생성된다고 가정합니다. , b 및 c는 쌍별 공소수이고; gcd(a, b) =gcd(b,c) =gcd(c, d) =1. 그림과 같이 한 조각으로 상자를 두 조각으로 잘라야 합니다. 우리는 상자가 이런 식으로 절단되었는지, 얼마나 많은 큐브가 두 조각으로 절단되었는지 알아내야 합니다. 가능한 3차원을 포함하는 배열이 제공되며 그로부터 답을 찾아야 합니다.
절단은 정점 P, Q, R을 통과하는 평면이 되는 방식으로 수행됩니다.
따라서 입력이 n =3, input_array =[[1, 2, 3], [4, 2, 5], [6, 8, 2]]인 경우 출력은 [5, 18, 37입니다. ]
주어진 3개의 다른 인스턴스가 있고 우리는 잘라낸 큐브의 수를 찾아야 합니다. 큐브가 그림과 같은 방식으로 절단된 경우; 5, 16, 37 큐브가 각각 잘립니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. &miuns;
- 출력:=새 목록
- 0에서 n 사이의 i에 대해
- a :=input_array[i, 0]
- b :=input_array[i, 1]
- c :=input_array[i, 2]
- val :=(a * b + a * c + b * c - 1) / 2 mod 1000000007의 하한값
- 출력 끝에 val 삽입
- 반환 출력
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from math import ceil def solve(n, input_array): output = [] for i in range(n): a, b, c = input_array[i][0], input_array[i][1], input_array[i][2] val = ((a * b + a * c + b * c - 1) // 2 % 1000000007) output.append(val) return output print(solve(3, [[1, 2, 3], [4, 2, 5], [6, 8, 2]]))
입력
3, [[1, 2, 3], [4, 2, 5], [6, 8, 2]]
출력
[5, 18, 37]