結果
問題 | No.132 点と平面との距離 |
ユーザー | mayoko_ |
提出日時 | 2015-01-21 00:07:35 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 527 ms / 5,000 ms |
コード長 | 1,349 bytes |
コンパイル時間 | 732 ms |
コンパイル使用メモリ | 87,588 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-22 23:26:14 |
合計ジャッジ時間 | 1,882 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 3 |
ソースコード
#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; }