hiho 矩形判斷

2021-06-25 15:14:59 字數 1274 閱讀 1308

時間限制:

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條線段是否恰好圍成矩形。

樣例輸入

3

0 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

樣例輸出

yes

yesno

題解:我們先確定這四條線段是否閉合並且有且只有4個頂點,每個頂點僅訪問兩次,並且將這四個頂點存放在d陣列中。然後對每個頂點及其旁邊的兩個頂點進行判斷是否垂直,也就是用到向量公式如下:

向量a=(x1,y1),向量b=(x2,y2),

a∥b的充要條件(或說成等價於)是x1y2-x2y1=0;

a⊥b的充要條件(或說成等價於)是x1x2+y1y2=0;

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define eps 1e-8

using namespace std;

struct node

f[5][3];

int pd(ll x,ll y)

map < pair,int>::iterator it;

int flag=0;

for (it=mp.begin();it!=mp.end();it++)

{ d[flag].x=(*it).first.first;

d[flag].y=(*it).first.second;

flag++;

//cout<<(*it).first.first<<" "<<(*it).first.second<

1040 矩形判斷

時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100000 ...

判斷矩形是否相交

假定矩形是用一對點表達的 minx,miny maxx,maxy 那麼兩個矩形 rect1 rect2 相交的結果一定是個矩形,構成這個相交矩形rect的點對座標是 minx max minx1,minx2 miny max miny1,miny2 maxx min maxx1,maxx2 maxy...

C 學習筆記 矩形判斷

時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100000 ...