博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihoCoder1040 矩形判断
阅读量:6583 次
发布时间:2019-06-24

本文共 2120 字,大约阅读时间需要 7 分钟。

#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条线段是否恰好围成矩形。

样例输入
30 0 0 11 0 1 10 1 1 11 0 0 00 1 2 31 0 3 23 2 2 31 0 0 10 1 1 01 0 2 02 0 1 11 1 0 1
样例输出
YESYESNO 分析:先判断四条边是否首尾相连,即是否构成四边形,再判断四边形是否是矩形。
#include
#include
#include
#include
using namespace std;struct Node{ int x1,y1,x2,y2;}a[10];int f(Node A,Node B){ int ans=0; if(A.x1==B.x1&&A.y1==B.y1) ans+=1; if(A.x1==B.x2&&A.y1==B.y2) ans+=10; if(A.x2==B.x1&&A.y2==B.y1) ans+=100; if(A.x2==B.x2&&A.y2==B.y2) ans+=1000; return ans;}int par(Node A,Node B)//判断平行 { if((A.x2-A.x1)*(B.y2-B.y1)==(B.x2-B.x1)*(A.y2-A.y1)) return 1; return 0;}int ver(Node A,Node B)//判断垂直{ if((A.x2-A.x1)*(B.x2-B.x1)+(A.y2-A.y1)*(B.y2-B.y1)==0) return 1; return 0;} int check(){ int i,m=0,n=0; for(i=1;i<4;i++) if(!f(a[0],a[i]))//无公共点 break; for(int j=1;j<4;j++) if(j!=i) { if(m==0) m=j; else n=j; } if(i==4) return 0; int flag=f(a[0],a[n]); if(!(flag==1||flag==10||flag==100||flag==1000)) return 0; flag=f(a[n],a[i]); if(!(flag==1||flag==10||flag==100||flag==1000)) return 0; flag=f(a[i],a[m]); if(!(flag==1||flag==10||flag==100||flag==1000)) return 0; flag=f(a[0],a[m]); if(!(flag==1||flag==10||flag==100||flag==1000)) return 0; if(!(par(a[0],a[i])&&par(a[m],a[n]))) return 0; if(!(ver(a[0],a[n])&&ver(a[0],a[m]))) return 0; if(!(ver(a[i],a[n])&&ver(a[i],a[m]))) return 0; return 1;}int main(){ int T; scanf("%d",&T); while(T--) { for(int i=0;i<4;i++) scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2); if(!check()) printf("NO\n"); else printf("YES\n"); } return 0;}
View Code

 

 

转载于:https://www.cnblogs.com/ACRykl/p/9560613.html

你可能感兴趣的文章
[清华集训2014]玛里苟斯
查看>>
Project Euler 345: Matrix Sum
查看>>
你可能不知道的技术细节:存储过程参数传递的影响
查看>>
.htaccess 基础教程(四)Apache RewriteCond 规则参数
查看>>
UVM中的class--2
查看>>
ORACLE 存储过程异常捕获并抛出
查看>>
root用户重置其他密码
查看>>
Oracle推断值为非数字
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
五年 Web 开发者 star 的 github 整理说明
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
中台之上(五):业务架构和中台的难点,都是需要反复锤炼出标准模型
查看>>
React Native 0.20官方入门教程
查看>>
JSON for Modern C++ 3.6.0 发布
查看>>
我的友情链接
查看>>
监听在微信中打开页面时的自带返回按钮事件
查看>>
第一个php页面
查看>>
最优化问题中黄金分割法的代码
查看>>
在JS中使用Ajax
查看>>