51 nod 1265 四點共面

2021-08-20 07:37:36 字數 1219 閱讀 2040

1265 四點共面

基準時間限制:1 秒 空間限制:131072 kb 分值: 0 

難度:基礎題

給出三維空間上的四個點(點與點的位置均不相同),判斷這4個點是否在同乙個平面內(4點共線也算共面)。如果共面,輸出"yes",否則輸出"no"。

input

第1行:乙個數t,表示輸入的測試數量(1 <= t <= 1000)

第2 - 4t + 1行:每行4行表示一組資料,每行3個數,x, y, z, 表示該點的位置座標(-1000 <= x, y, z <= 1000)。

output

輸出共t行,如果共面輸出"yes",否則輸出"no"。
input示例

1

1 2 0

2 3 0

4 0 0

0 0 0

output示例

yes
程式設計之美.....

判斷四點共面可以用向量的方法,首先,我們假設a,b,c,d四點共面,我們知道,三個向量可能共線,可能共面,也可能在同乙個三維空間內,如果學過線性代數的話就會知道,三個向量如果線性相關,則至少存在乙個向量能夠被其餘的兩個向量線性表示,這就意味著這三個向量只能在乙個平面內或者在一條直線上了,如此便證明了三個向量共面,我們設 ba,ca,da三個向量,如果這三個向量線性相關便能證明 a,b,c,d四點共面了,那麼如果三個向量線性相關,那麼必有不全為0的三個數 i,j,k使得  i*ba+j*ca+k*da=0,此齊次方程組有非零解,則其係數行列式的值一定等於0(根據克拉默法則),即

#include using namespace std;

struct pot

a,b,c,d;

struct vec

ba,ca,da;

double judge(pot a, pot b, pot c, pot d)

int main()

{ int t;

cin>>t;

while(t--)

{ cin>>a.x>>a.y>>a.z>>b.x>>b.y>>b.z>>c.x>>c.y>>c.z>>d.x>>d.y>>d.z;

if(judge(a,b,c,d))

{ cout<

51nod1265四點共面

原題鏈結 四點共面即以某點指向其它三點的向量的混合積為0 如下 include include include include include include include include include include include include define ll long long us...

51Nod 1265 四點共面

1265 四點共面 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出三維空間上的四個點 點與點的位置均不相同 判斷這4個點是否在同乙個平面內 4點共線也算共面 如果共面,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 ...

51nod1265 四點共面

傳送門 點我 給出三維空間上的四個點 點與點的位置均不相同 判斷這4個點是否在同乙個平面內 4點共線也算共面 如果共面,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 4t 1行 每行4行表示一組資料,每行3個數,x,y,z,表示該點的位置座標...