hihoCoder1040 矩形判斷

2021-08-04 10:34:17 字數 1135 閱讀 9068

時間限制:1000ms

單點時限:1000ms

記憶體限制:256mb

描述給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。

輸入輸入第一行是乙個整數t(1<=t<=100),代表測試資料的數量。

每組資料報含4行,每行包含4個整數x1, y1, x2, y2 (0 <= x1, y1, x2, y2 <= 100000);其中(x1, y1), (x2,y2)代表一條線段的兩個端點。

輸出每組資料輸出一行yes或者no,表示輸入的4條線段是否恰好圍成矩形。

樣例輸入

30 0 0 1

1 0 1 1

0 1 1 1

1 0 0 0

0 1 2 3

1 0 3 2

3 2 2 3

1 0 0 1

0 1 1 0

1 0 2 0

2 0 1 1

1 1 0 1

樣例輸出

yesyes

no思路:

解這道題需要考慮三個問題:1.線段長度是否為零。

2.線段是否恰好能圍成四邊形。

3.該四邊形是否為矩形。

判斷是否四邊形:四條線段共8個端點,只有8個端點兩兩重合時(即只有四個點),才是四邊形。

判斷是否矩形:要麼證四邊形兩組對邊平行且有乙個角為直角,要麼證四邊形三個角為直角。

方法:

結構體,向量點乘為零。

#include#include#includeusing namespace std;

struct point

po,qo,c;

int main()

/*線段是否恰好能圍成四邊形,判斷八個點是不是兩兩重合*/

for(j=0;j<4;j++)

for(k=j+1;k<4;k++)

if((po.x[j]==qo.x[k]&&po.y[j]==qo.y[k])||(po.x[j]==po.x[k]&&po.y[j]==po.y[k])||(qo.x[j]==qo.x[k]&&qo.y[j]==qo.y[k])||(qo.x[j]==po.x[k]&&qo.y[j]==po.y[k]))

num++;

if(w==1)

{cout<<"no"<

hihoCoder 1040 矩形判斷

描述 給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入 輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100000 其中 x1,y1 x2,y2 代表一條線段的兩個端點。輸出 ...

hihoCoder1040 矩形判斷

大體思路是可以出來的,就是先判斷能否組成四邊形,然後再判斷能否組成矩形。四邊形這部分比較難搞,但是我們有st l 啊,直接自定義乙個小於號,然後把所有的點扔進se t 最後看下si ze是不是等於 4 就好了。好,我們已經知道了這是乙個四邊形,再怎麼判斷它是否是矩形?思來想去啊,似乎計算幾何中沒有簡...

矩形判斷 hihoCoder1040

題意 給四個線段,判斷是否圍成了乙個矩形。思路 先判定是不是平行四邊形,再判斷是否有乙個角是直角。判定是否是平行四邊形可以通過統計頂點數和邊長的個數來進行。判斷是否有乙個角是直角可以通過邊向量來判斷。起初我判斷是否有乙個角是直角通過任取三個頂點,然後通過勾股定理判斷是否存在乙個直角,想了很久才想到反...