您的位置:首页 > 其它

hihoCoder 矩形判断

2016-03-16 16:00 337 查看


#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


#include <bits/stdc++.h>
using namespace std;
#define rep( i, a, b )	for ( int i = a; i < b; i++ )
#define scanf_d( x )	scanf( "%d", &x )

int isok( int ar[4][2] )
{
rep( i, 0, 4 )
{
rep( j, i + 1, 4 )
{
int x1, y1, x2, y2;
x1	= ar[i][0];
x2	= ar[j][0];
y1	= ar[i][1];
y2	= ar[j][1];
if ( x1 * y2 == x2 * y1 )
continue;
if ( x1 * x2 + y2 * y1 == 0 )
continue;
return(0);
}
}
return(1);
}

int main()
{
int			ar[4][2];
set<pair<int, int> >	sets;
int			test = 0;
scanf_d( test );
while ( test-- )
{
sets.clear();
int a, b, c, d;
rep( i, 0, 4 )
{
scanf( "%d%d%d%d", &a, &b, &c, &d );
sets.insert( make_pair( a, b ) );
sets.insert( make_pair( c, d ) );
ar[i][0]	= c - a;
ar[i][1]	= d - b;
}

if ( sets.size() == 4 )
{
if ( isok( ar ) )
{
printf( "YES\n" );
}else{
printf( "NO\n" );
}
}else{
printf( "NO\n" );
}
}
return(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: