結果
問題 | No.132 点と平面との距離 |
ユーザー | rpy3cpp |
提出日時 | 2015-08-06 20:55:33 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 2,860 ms / 5,000 ms |
コード長 | 1,013 bytes |
コンパイル時間 | 88 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 29,312 KB |
最終ジャッジ日時 | 2024-07-18 03:42:59 |
合計ジャッジ時間 | 4,501 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 143 ms
12,928 KB |
testcase_01 | AC | 855 ms
19,200 KB |
testcase_02 | AC | 2,860 ms
29,312 KB |
ソースコード
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))