結果
| 問題 | No.132 点と平面との距離 | 
| コンテスト | |
| ユーザー |  titia | 
| 提出日時 | 2022-10-25 04:54:34 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                TLE
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,950 bytes | 
| コンパイル時間 | 190 ms | 
| コンパイル使用メモリ | 12,800 KB | 
| 実行使用メモリ | 16,256 KB | 
| 最終ジャッジ日時 | 2024-07-03 06:53:56 | 
| 合計ジャッジ時間 | 12,715 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 1 TLE * 1 -- * 1 | 
ソースコード
# 行基本変形(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)/((a*a+b*b+1)**(1/2))
print(ANS)
            
            
            
            
            
        