結果
問題 | No.132 点と平面との距離 |
ユーザー | koyumeishi |
提出日時 | 2015-01-21 00:26:36 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 33 ms / 5,000 ms |
コード長 | 1,361 bytes |
コンパイル時間 | 526 ms |
コンパイル使用メモリ | 76,880 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-22 23:28:57 |
合計ジャッジ時間 | 954 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
5,248 KB |
testcase_01 | AC | 11 ms
5,376 KB |
testcase_02 | AC | 33 ms
5,376 KB |
ソースコード
#include <iostream> #include <vector> #include <cstdio> #include <sstream> #include <map> #include <string> #include <algorithm> #include <queue> #include <cmath> #include <set> using namespace std; class xyz{ public: double x; double y; double z; xyz(){ } xyz(double xx, double yy, double zz){ x = xx; y = yy; z = zz; } xyz(const xyz &v){ x = v.x; y = v.y; y = v.z; } xyz& operator=(const xyz &v){ x = v.x; y = v.y; z = v.z; return *this; } xyz operator+(const xyz &v) const{ return xyz(this->x+v.x, this->y+v.y, this->z+v.z); } xyz operator-(const xyz &v) const{ return xyz(this->x-v.x, this->y-v.y, this->z-v.z); } }; xyz cross(const xyz &u, const xyz &v){ return xyz( u.y*v.z-u.z*v.y, u.z*v.x-u.x*v.z, u.x*v.y-u.y*v.x); } double dot(const xyz &u, const xyz &v){ return u.x*v.x + u.y*v.y + u.z*v.z; } int main(){ int n; cin >> n; double px,py,pz; cin >> px >> py >> pz; xyz p(px,py,pz); vector<xyz> q(n); for(int i=0; i<n; i++){ double x,y,z; cin >> x >> y >> z; q[i] = xyz(x,y,z); } 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++){ xyz w = cross(q[j]-q[i], q[k]-q[i]); double wd = -w.x*q[i].x -w.y*q[i].y -w.z*q[i].z; ans += abs( dot(p,w) + wd )/sqrt(dot(w,w)); } } } printf("%.11f\n", ans); return 0; }