結果

問題 No.132 点と平面との距離
ユーザー mayoko_mayoko_
提出日時 2015-01-21 00:07:35
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 503 ms / 5,000 ms
コード長 1,349 bytes
コンパイル時間 1,135 ms
コンパイル使用メモリ 88,968 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-05 02:36:54
合計ジャッジ時間 2,010 ms
ジャッジサーバーID
(参考情報)
judge15 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <utility>
#include <set>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <valarray>

#define INF 1000000000

using namespace std;
typedef long long ll;
const int HANSHIN = 334;

valarray<double> q[HANSHIN];
valarray<double> p(3);

double getDist(valarray<double>a, valarray<double>b, valarray<double>c, valarray<double> d) {
    auto P = c-b;
    auto Q = d-b;
    valarray<double> R(3);
    R[0] = P[1]*Q[2] - Q[1]*P[2];
    R[1] = P[2]*Q[0] - Q[2]*P[0];
    R[2] = P[0]*Q[1] - Q[0]*P[1];
    double normal = sqrt(R[0]*R[0] + R[1]*R[1] + R[2]*R[2]);
    for (int i = 0; i < 3; i++) R[i] /= normal;
    a -= b;
    return abs(R[0]*a[0] + R[1]*a[1] + R[2]*a[2]);
}

int main(void) {
    for (int i = 0; i < HANSHIN; i++) {
        q[i].resize(3);
    }
    int N;
    cin >> N;
    cin >> p[0] >> p[1] >> p[2];
    for (int i = 0; i < N; i++) {
        cin >> q[i][0] >> q[i][1] >> q[i][2];
    }
    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 += getDist(p, q[i], q[j], q[k]);
            }
        }
    }
    printf("%.10lf\n", ans);
    return 0;
}
0