题意:
给出四条线段的起点,终点坐标,四条线段平行或垂直坐标轴,问这四条线段能否构成矩形
矩形的特征就两点,对边等长平行,有四条边,抓住这几点就可以了
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
struct node
{
__int64 x1,y1,x2,y2,len;
}a[4];
struct node1
{
__int64 x,y;
}b[8];
int main()
{
int flag=1;
int k[2],l[2];
int t1=0,t2=0;
map<__int64,__int64>Map;
for(int i=0;i<4;i++)
{
cin>>a[i].x1>>a[i].y1>>a[i].x2>>a[i].y2;
b[2*i].x=a[i].x1,b[2*i].y=a[i].y1;
b[2*i+1].x=a[i].x2,b[2*i+1].y=a[i].y2;
if(a[i].x1==a[i].x2)
{
a[i].len = abs(a[i].y1-a[i].y2);
k[t1++] = i;
}
else if(a[i].y1==a[i].y2)
{
a[i].len = abs(a[i].x1-a[i].x2);
l[t2++] = i;
}
else if(a[i].x1!=a[i].x2 && a[i].y1!=a[i].y2) flag=0;
}
if(flag==0 || t1!=2 || t2!=2) cout<<"NO"<<endl;
else
{
if(a[k[0]].len!=a[k[1]].len || a[l[0]].len != a[l[1]].len)
cout<<"NO"<<endl;
else
{
int p=0;
for(int i=0;i<8;i++)
{
int flag1=0;
for(int j=i+1;j<8;j++)
{
if(b[i].x==b[j].x && b[i].y==b[j].y && flag1==0)
{
p++;
flag1=1;
continue;
}
if(b[i].x==b[j].x && b[i].y==b[j].y && flag1==1)
{
flag=0;
break;
}
}
if(flag==0) break;
}
if(p!=4 || flag==0) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}
return 0;
}