結果

問題 No.132 点と平面との距離
ユーザー 古寺いろは古寺いろは
提出日時 2015-04-05 22:11:25
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 59 ms / 5,000 ms
コード長 1,277 bytes
コンパイル時間 1,212 ms
コンパイル使用メモリ 149,672 KB
実行使用メモリ 4,388 KB
最終ジャッジ日時 2023-09-17 04:36:12
合計ジャッジ時間 1,768 ms
ジャッジサーバーID
(参考情報)
judge12 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

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

double area(double d1, double d2, double d3){
	double s = (d1 + d2 + d3) / 2;
	return sqrt(s * (s - d1) * (s - d2) * (s - d3));
}

double volume(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4){
	return abs((x4 - x1) * ((y2 - y1) * (z3 - z1) - (z2 - z1) * (y3 - y1))
		+ (y4 - y1) * ((z2 - z1) * (x3 - x1) - (x2 - x1) * (z3 - z1))
		+ (z4 - z1) * ((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1))) / 6;
}

double hypot3(double x, double y, double z){
	return sqrt(x*x + y*y + z*z);
}

int main() {
	int N;
	double Px, Py, Pz;
	cin >> N;
	cin >> Px >> Py >> Pz;
	vector<double> X(N), Y(N), Z(N);
	for (int i = 0; i < N; i++)
	{
		cin >> X[i] >> Y[i] >> Z[i];
	}
	vector<vector<double>> dist(N, vector<double>(N));
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			dist[i][j] = hypot3(X[i] - X[j], Y[i] - Y[j], Z[i] - Z[j]);
		}
	}

	double ans = 0;
	for (int i = 0; i < N; i++)
	{
		for (int j = i + 1; j < N; j++)
		{
			for (int k = j + 1; k < N; k++)
			{
				ans += volume(X[i], Y[i], Z[i], X[j], Y[j], Z[j], X[k], Y[k], Z[k], Px, Py, Pz) / area(dist[i][j], dist[j][k], dist[k][i]) * 3;
			}
		}
	}
	printf("%.14f\n", ans);	
}
0