链接:https://ac.nowcoder.com/acm/problem/14605
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
小学时,JYM和XJ刚刚学习了三角形,XJ提议把眼睛闭起来在纸上画三角形,巩固知识。为了让三角形更好地表示,JYM去拿了一张坐标纸(不要问为什么小学的他就有坐标纸),坐标纸的范围是[-1000,1000]。于是,XJ就在坐标纸上画了N个三角形(当然他也可能画了一条直线出来)。因为小学的他们还没有学习小数,所以所有的三角形顶点的坐标,都被JYM近似成了整数点。现在,JYM和XJ想知道这些三角形有没有将坐标原点包含在里面,请你编写程序解决这个问题。
输入描述:
一个整数N(N<1000),表示有N个三角形。接下来每一行有两个整数x(-1000<=x<=1000)和y(-1000<=y<=1000),表示一个点的坐标;每三行的三个点构成一个三角形。
输出描述:
为每个三角形输出一个YES或者NO。YES表示三角形包含了坐标原点,NO表示三角没有包含坐标原点或者坐标原点在三角形的边界上或者当前的三个点不能构成三角形。
N = int(input())def Area(x1,y1,x2,y2,x3,y3):return abs(x1 * y2 - x2 * y1 + x2 * y3 - x3 * y2 + x3 * y1 - x1 * y3) / 2for _ in range(N):a, b, c = [list(map(int, input().split())) for _ in range(3)]x1, y1, x2, y2, x3, y3 = a[0], a[1], b[0], b[1], c[0], c[1]# 面积area = Area(x1, y1, x2, y2, x3, y3)# 分别和原点构成的三角形面积area1 = Area(x1, y1, x2, y2, 0, 0)area2 = Area(x1, y1, x3, y3, 0, 0)area3 = Area(x2, y2, x3, y3, 0, 0)if area != (area1 + area2 + area3):# 不能构成三角形或没有包含坐标原点print('NO')elif area1 == 0 or area2 == 0 or area3 == 0:# 原点在边界上print('NO')else:print('YES')