結果
問題 |
No.132 点と平面との距離
|
ユーザー |
![]() |
提出日時 | 2025-03-20 18:49:48 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 315 ms / 5,000 ms |
コード長 | 1,377 bytes |
コンパイル時間 | 177 ms |
コンパイル使用メモリ | 82,532 KB |
実行使用メモリ | 76,256 KB |
最終ジャッジ日時 | 2025-03-20 18:51:53 |
合計ジャッジ時間 | 1,077 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 3 |
ソースコード
import sys import math from itertools import combinations def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 Px = float(input[ptr]) Py = float(input[ptr+1]) Pz = float(input[ptr+2]) ptr += 3 x, y, z = [], [], [] for _ in range(N): xi = float(input[ptr]) yi = float(input[ptr+1]) zi = float(input[ptr+2]) x.append(xi) y.append(yi) z.append(zi) ptr += 3 # Precompute AP vectors for all points APx = [Px - xi for xi in x] APy = [Py - yi for yi in y] APz = [Pz - zi for zi in z] sum_dist = 0.0 for i, j, k in combinations(range(N), 3): # Vectors AB and AC ABx = x[j] - x[i] ABy = y[j] - y[i] ABz = z[j] - z[i] ACx = x[k] - x[i] ACy = y[k] - y[i] ACz = z[k] - z[i] # Cross product (normal vector) a = ABy * ACz - ABz * ACy b = ABz * ACx - ABx * ACz c = ABx * ACy - ABy * ACx # AP vector for point i apx = APx[i] apy = APy[i] apz = APz[i] # Dot product dot = a * apx + b * apy + c * apz numerator = abs(dot) denominator = math.sqrt(a*a + b*b + c*c) sum_dist += numerator / denominator print("{0:.15f}".format(sum_dist)) if __name__ == '__main__': main()