時間限制:
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
樣例輸出
yesyesno
題解:我們先確定這四條線段是否閉合並且有且只有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 ...