結果
| 問題 |
No.132 点と平面との距離
|
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2015-01-21 00:26:36 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 |
ソースコード
#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;
}
koyumeishi