結果
問題 | No.132 点と平面との距離 |
ユーザー | chocorusk |
提出日時 | 2020-09-13 10:25:45 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,112 bytes |
コンパイル時間 | 266 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 17,948 KB |
最終ジャッジ日時 | 2024-06-11 18:35:45 |
合計ジャッジ時間 | 8,801 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 990 ms
11,008 KB |
testcase_01 | TLE | - |
testcase_02 | -- | - |
ソースコード
import sys read=sys.stdin.buffer.read readline=sys.stdin.buffer.readline readlines=sys.stdin.buffer.readlines class Point: def __init__(self, x, y, z): self.x=x self.y=y self.z=z def __add__(self, other): return Point(self.x+other.x, self.y+other.y, self.z+other.z) def __sub__(self, other): return Point(self.x-other.x, self.y-other.y, self.z-other.z) def __mul__(self, other): return Point(self.x*other, self.y*other, self.z*other) def dot(self, other): return self.x*other.x+self.y*other.y+self.z*other.z n=int(readline()) px, py, pz=map(float, readline().split()) p=Point(px, py, pz) xyzs=list(map(float, read().split())) xs=xyzs[::3] ys=xyzs[1::3] zs=xyzs[2::3] qs=[Point(x, y, z) for x, y, z in zip(xs, ys, zs)] import itertools, math ans=0 for q1, q2, q3 in itertools.combinations(qs, 3): a, b, c=q1-p, q2-q1, q3-q1 ab, ac, bb, bc, cc=a.dot(b), a.dot(c), b.dot(b), b.dot(c), c.dot(c) d=bb*cc-bc*bc s=(-cc*ab+bc*ac)/d t=(bc*ab-bb*ac)/d e=a+b*s+c*t ans+=math.sqrt(e.dot(e)) print('{:.10f}'.format(ans))