結果
| 問題 |
No.132 点と平面との距離
|
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2022-10-25 05:01:34 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,013 bytes |
| コンパイル時間 | 160 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 79,228 KB |
| 最終ジャッジ日時 | 2024-07-03 06:59:45 |
| 合計ジャッジ時間 | 10,308 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 TLE * 1 |
ソースコード
import io, os
input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline
from math import sqrt
# 行基本変形(floatで計算)
def row_transformation(A,x): # xは正方行列の行数
for i in range(x):
for j in range(x):
if i==j:
continue
base=A[i][i]
target=A[j][i]
if target==0:
continue
for k in range(x):
A[j][k]-=A[i][k]*(target/base)
return A
# 逆行列を掃き出し法で計算(floatで計算)
def inv_transformation(A,x): # xは正方行列の行数
for i in range(x):
A[i]+=[0]*x
A[i][i+x]=1
for i in range(x):
for j in range(x):
if i==j:
continue
base=A[i][i]
if base!=1:
for k in range(x*2):
A[i][k]/=base
target=A[j][i]
if target==0:
continue
for k in range(x*2):
A[j][k]-=A[i][k]*target
B=[[0]*x for i in range(x)]
for i in range(x):
for j in range(x):
B[i][j]=A[i][j+x]
return B
def prod(A,B,k,l,m):# A:k*l,B:l*m
C=[[None for i in range(m)] for j in range(k)]
for i in range(k):
for j in range(m):
ANS=0
for pl in range(l):
ANS=(ANS+A[i][pl]*B[pl][j])
C[i][j]=ANS
return C
N=int(input())
x,y,z=map(float,input().split())
P=[tuple(map(float,input().split())) for i in range(N)]
ANS=0
for i in range(N):
for j in range(i+1,N):
for k in range(j+1,N):
x0,y0,z0=P[i]
x1,y1,z1=P[j]
x2,y2,z2=P[k]
A=[[x0,y0,1],[x1,y1,1],[x2,y2,1]]
INV=inv_transformation(A,3)
X=prod(INV,[[z0],[z1],[z2]],3,3,1)
a=X[0][0]
b=X[1][0]
c=X[2][0]
ANS+=abs(a*x+b*y-z+c)/sqrt(a*a+b*b+1)
print(ANS)
titia