#1040 : 矩形判断

网友投稿 520 2022-11-08

#1040 : 矩形判断

#1040 : 矩形判断

#1040 : 矩形判断

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 YES NO

AC代码:

#include #include #include #include using namespace std;struct point{ int x, y; bool operator < (const point& p2) const //用于排序 { //先判断横坐标 if(x s; for(int i=0; i<4; i++) { s.insert(l[i].p1); s.insert(l[i].p2); } return (s.size() == 4);}int judgeRect(line *l){ for(int i=1; i<4; ++i) { //判断是不是垂直 if((l[0].p1.y-l[0].p2.y)*(l[i].p1.y-l[i].p2.y)==-(l[0].p1.x-l[0].p2.x)*(l[i].p1.x-l[i].p2.x)) continue; //判断是不是平行 if((l[0].p1.y-l[0].p2.y)*(l[i].p1.x-l[i].p2.x)==(l[0].p1.x-l[0].p2.x)*(l[i].p1.y-l[i].p2.y)) continue; return false; } return true; }int main(){ line l[4]; int T; scanf("%d", &T); while(T--) { for(int i=0; i<4; i++) scanf("%d %d %d %d", &l[i].p1.x, &l[i].p1.y, &l[i].p2.x, &l[i].p2.y); int flag = 0; if(judgePoint(l) && judgeRect(l)) flag = 1; if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:#1098 : 最小生成树二·Kruscal算法
下一篇:2013 前缀判断
相关文章

 发表评论

暂时没有评论,来抢沙发吧~