結果
問題 | No.132 点と平面との距離 |
ユーザー | titia |
提出日時 | 2022-10-25 04:56:15 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,996 bytes |
コンパイル時間 | 338 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 85,816 KB |
最終ジャッジ日時 | 2024-07-03 06:54:48 |
合計ジャッジ時間 | 11,239 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 578 ms
79,028 KB |
testcase_01 | AC | 3,262 ms
79,332 KB |
testcase_02 | TLE | - |
ソースコード
import io, os input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline # 行基本変形(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)