結果

問題 No.132 点と平面との距離
ユーザー nebukuro09nebukuro09
提出日時 2016-11-10 17:37:06
言語 D
(dmd 2.105.2)
結果
AC  
実行時間 1,709 ms / 5,000 ms
コード長 986 bytes
コンパイル時間 2,261 ms
コンパイル使用メモリ 162,444 KB
実行使用メモリ 4,372 KB
最終ジャッジ日時 2023-09-02 22:52:11
合計ジャッジ時間 5,203 ms
ジャッジサーバーID
(参考情報)
judge13 / judge14
このコードへのチャレンジ(β)

テストケース

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

ソースコード

diff #

import std.stdio;
import std.array;
import std.string;
import std.conv;
import std.algorithm;
import std.typecons;
import std.range;
import std.random;
import std.math;
import std.container;
import std.numeric;

void main() {
  int N = readln.chomp.to!int;
  auto P = readln.split.map!(to!real).array;
  auto Q = iota(N).map!(_ => readln.split.map!(to!real).array).array;
  real ans = 0.0;

  foreach (i; iota(N))
    foreach (j; iota(i+1, N))
      foreach (k; iota(j+1, N)) {
        auto ij = [Q[j][0]-Q[i][0], Q[j][1]-Q[i][1], Q[j][2]-Q[i][2]];
        auto ik = [Q[k][0]-Q[i][0], Q[k][1]-Q[i][1], Q[k][2]-Q[i][2]];
        auto cross = [ij[1]*ik[2]-ij[2]*ik[1],
                      ij[2]*ik[0]-ij[0]*ik[2],
                      ij[0]*ik[1]-ij[1]*ik[0]];
        cross[] /= sqrt(cross[0]^^2+cross[1]^^2+cross[2]^^2);
        auto ip = [P[0]-Q[i][0], P[1]-Q[i][1], P[2]-Q[i][2]];
        ans += abs(cross[0]*ip[0]+cross[1]*ip[1]+cross[2]*ip[2]);
      }
  writef("%.09f", ans);
}
0