結果

問題 No.132 点と平面との距離
ユーザー LayCurseLayCurse
提出日時 2014-11-13 15:06:25
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 43 ms / 5,000 ms
コード長 938 bytes
コンパイル時間 1,204 ms
コンパイル使用メモリ 145,656 KB
実行使用メモリ 4,744 KB
最終ジャッジ日時 2023-08-30 03:23:33
合計ジャッジ時間 1,773 ms
ジャッジサーバーID
(参考情報)
judge15 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 4 ms
4,376 KB
testcase_01 AC 14 ms
4,492 KB
testcase_02 AC 43 ms
4,744 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int N;
double X[501], Y[501], Z[501];
double dist[501][501];

int main(){
  int i, a, b, c;
  double dx, dy, dz;
  double d1, d2, d3, ss, s, v;
  double res;

  scanf("%d",&N);
  scanf("%lf%lf%lf",&dx,&dy,&dz);
  rep(i,N) scanf("%lf%lf%lf",X+i,Y+i,Z+i), X[i]-=dx, Y[i]-=dy, Z[i]-=dz;

  rep(a,N) REP(b,a+1,N) dist[a][b] = dist[b][a] = sqrt( (X[a]-X[b])*(X[a]-X[b]) + (Y[a]-Y[b])*(Y[a]-Y[b]) + (Z[a]-Z[b])*(Z[a]-Z[b]) );

  res = 0;
  rep(a,N) REP(b,a+1,N) REP(c,b+1,N){
    d1 = dist[a][b];
    d2 = dist[b][c];
    d3 = dist[c][a];
    ss = (d1+d2+d3) / 2;
    s = sqrt(ss*(ss-d1)*(ss-d2)*(ss-d3));

    v = (X[a]*Y[b]*Z[c] + X[b]*Y[c]*Z[a] + X[c]*Y[a]*Z[b] - X[c]*Y[b]*Z[a] - X[b]*Y[a]*Z[c] - X[a]*Y[c]*Z[b]) / 2;
    res += max(v, -v) / s;
  }
  printf("%.15f\n", res);
  
  return 0;
}
0