时间限制:
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
思路分析:
这道题目,思路比较好像,要判断是否是矩阵:1、给出的线段是否只有四个点2、给出的线段是否两两相等且平行3、给出的线段不平行的线段是否向量积为0.
【矩形判断】
#includeusing namespace std;
int a[10][3];
int b[5][3];
int main()
{
int t;
int i=1;
int flag=0;
int x1,x2,y1,y2;
scanf("%d",&t);
while(i<=t)
{
flag=0;
int j=1;
int j1;
int mini=0;
while(j<=4)
{
scanf("%d%d%d%d",&a[2*j-1][1],&a[j*2-1][2],&a[j*2][1],&a[j*2][2]);
b[j][1]=a[j*2][1]-a[j*2-1][1];
b[j][2]=a[j*2][2]-a[j*2-1][2];
if(b[j][1]<0)
{
b[j][1]=-b[j][1];
b[j][2]=-b[j][2];
}
j++;
}//排个序更容易看;
for(j=1;
j<8;
j++)
{
mini=j;
for(j1=j+1;
j1<=8;
j1++)
{
if(a[mini][1]>a[j1][1])
{
mini=j1;
}
else
{
if(a[mini][1]==a[j1][1])
{
if(a[mini][2]>a[j1][2])
{
mini=j1;
}
}
}
}
x1=a[j][1];
y1=a[j][2];
a[j][1]=a[mini][1];
a[j][2]=a[mini][2];
a[mini][1]=x1;
a[mini][2]=y1;
}
for(j=1;
j<=4;
j++)
{
if(a[j*2][1]!=a[j*2-1][1]||a[j*2][2]!=a[j*2-1][2])
{
flag=1;
}}for(j=1;
j<4;
j++)
{
mini=j;
for(j1=j+1;
j1<=4;
j1++)
{
if(b[mini][1]>b[j1][1])
{
mini=j1;
}
else
{
if(b[mini][1]==b[j1][1])
{
if(b[mini][2]>b[j1][2])
{
mini=j1;
}
}
}
}
x1=b[j][1];
y1=b[j][2];
b[j][1]=b[mini][1];
b[j][2]=b[mini][2];
b[mini][1]=x1;
b[mini][2]=y1;
}
for(j=1;
j<=2;
j++)
{
if(b[j*2][1]!=b[j*2-1][1]||b[j*2][2]!=b[j*2-1][2])
{
flag=1;
}}
if(b[1][1]*b[3][1]+b[1][2]*b[3][2]!=0)
{
flag=1;
}
if(flag==1)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
i++;
}
return 0;
}
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络