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); }
相关文章推荐
- HBase
- Linux mysql 允许远程连接
- Windows7下mysql安装后服务无法启动和启动后无法登录的问题解决的方法
- 不能安装异常
- C/C++中int/long/float/double数值类型与字符串互相转换[总结]
- [疯狂Java]多线程:创建和启动线程
- 基于Flume的美团日志收集系统(一)架构和设计
- 在Linux下安装feedparser
- C#和java和android中的NetWorkAdapter,httpRequest,WebView,json,xml
- httplib-Python
- eclipse 批量 查询 替换
- Git让gitignore生效
- jQuery Ajax 实例 ($.ajax、$.post、$.get)
- C++字面值常量
- java中的 FileWriter类 和 FileReader类的一些基本用法
- powerDesigner生成excel版本的数据库文件
- Java集合之TreeMap
- 性能测试实践-linux
- bzoj 2456 mode
- sass初学练习一