1468 : 硬币
时间限制Time Limit
1
秒Sec
内存限制Memory Limit
128
兆MB
提交次数Submitted
0 次Times
通过次数Solved
0 次Times
标准评测 Standard
从标准输入读入,结果写到标准输出。评测将输出拆成 token,与标准答案逐项比较,不按整段逐字节比对。
Read from standard input and write to standard output. The judge splits the output into tokens and compares them with the official answer; it does not compare raw bytes.
| 比对Compare | token 相同即通过。中间的空格、制表符、换行可多可少。Matching tokens pass. Extra spaces, tabs, or newlines between them are ignored. |
|---|---|
| 不同则错Differs | token 个数或内容不同即错误。23 与 2 3、02 与 2、2.0 与 2 均视为不同。A different token count or value is wrong. 23 vs 2 3, 02 vs 2, and 2.0 vs 2 all differ. |
| 输入Input | 标准输入,格式见题面。Standard input; format as in the statement. |
| 输出Output | 标准输出。Standard output. |
题目描述Description
有一种桌面游戏曾经风靡一时,玩这个游戏非常方便,只需要三个一样大的硬币和一张平整的桌面。游戏的玩法也非常简单,玩家需要让被选中的一枚硬币沿着某一条直线移动,使其能够从另外两个硬币中间的空当穿过。移动的硬币不能撞到另外两枚硬币,但是允许在移动过程中相切。

现在给你三个硬币的大小和在平面直角坐标系中的位置,请你判断第一个硬币能否沿着某条直线穿过另外两枚硬币中间的空当。
输入格式Input
输入的第一行为一个正整数 T (1 \leq T \leq 10000),代表有 T 组数据
每组数据各占一行,为七个正整数 r, x1, y1, x2, y2, x3, y3 (0 < r \leq 1000) (-1000 \leq x1, y1, x2, y2, x3, y3 \leq 1000), r 为三个硬币的半径,(x1, y1) (x2, y2) (x3, y3) 分别为第一个第二个和第三个硬币的的位置。保证三个硬币在初始位置没有相交。
输出格式Output
每组数据输出一行,如果可以顺利穿过则输出”Yes”, 反之输出 “No”。 (不含引号,首字母大写)
样例Sample
提示Hint
计算几何————速通向量叉积
以下讨论都建立在最常见的右手系平面直角坐标系中
两个向量 a(x_1, y_1), b(x_2, y_2) 的叉积 a \times b 值为 x_1 * y_2 - x_2 * y_1
当这个值为一个正数的时候,我们就可以知道向量 b 在向量 a 的左侧,即使用右手定则判断时大拇指朝上,如图

反之,当这个值为一个负数的时候,我们就可以知道向量 b 在向量 a 的右侧,即使用右手定则判断时大拇指朝下,如图

当这个值等于 0 时我们就可以确定这两个向量的方向完全相同或完全相反。
出题Author
DOGGOD_Q