結果
| 問題 |
No.132 点と平面との距離
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-06 20:56:00 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 250 ms / 5,000 ms |
| コード長 | 1,013 bytes |
| コンパイル時間 | 156 ms |
| コンパイル使用メモリ | 82,120 KB |
| 実行使用メモリ | 87,048 KB |
| 最終ジャッジ日時 | 2024-07-18 03:43:00 |
| 合計ジャッジ時間 | 1,091 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 |
ソースコード
import math
def read_data():
N = int(input())
x, y, z = map(float, input().split())
Ps = []
for i in range(N):
xi, yi, zi = map(float, input().split())
Ps.append((xi-x, yi-y, zi-z))
return N, Ps
def solve(N, Ps):
dist, outer = preprocess(N, Ps)
return sum(dist3(i, j, k, dist, outer, Ps) for i in range(N-2) for j in range(i+1, N-1) for k in range(j+1, N))
def preprocess(N, Ps):
_sqrt = math.sqrt
dist = [[_sqrt((xi-xj)**2+(yi-yj)**2+(zi-zj)**2) for xj, yj, zj in Ps] for xi, yi, zi in Ps]
outer = [[(yi*zj - zi*yj, zi*xj - xi*zj, xi*yj - yi*xj) for xj, yj, zj in Ps] for xi, yi, zi in Ps]
return dist, outer
def dist3(i, j, k, dist, outer, Ps):
d1 = dist[i][j]
d2 = dist[j][k]
d3 = dist[k][i]
s = (d1 + d2 + d3) / 2
S = math.sqrt(s * (s - d1) * (s - d2) * (s - d3))
xij, yij, zij = outer[i][j]
xk, yk, zk = Ps[k]
V = (xij * xk + yij * yk + zij * zk) / 2
return abs(V)/S
N, Ps = read_data()
print(solve(N, Ps))