jl 和 sz 总是一起在无故事王国完成部道乐跑的任务。在这学期他们每人都需要完成 30 次部道乐跑任务,每个任务需要跑 2500m,并且完成两个签到任务。完成一个签到任务当且仅当处于距离签到点小于等于 \mathbf{100m} 的位置。
由于每次领取任务时,jl 和 sz 领取到的签到任务不都是一样的,而他们又想一起同行。于是,他们决定,从一个起始点出发,按照特定顺序一起完成他们加起来的四个签到任务。
由于他们不想深入思考,所以他们采用如下的简单方法跑步:选择一个尚未完成的签到点,从起始点出发走直线一直跑,直到跑到离该签到点恰为 100m 的位置。此时,他们会检查此刻尚未完成的其他签到点,并再次选择一个,从当前位置出发前往新的签到点,直到跑到离该签到点恰为 100m 的位置。如此循环,直到完成所有的签到任务。
他们想要知道,对于给定的起始点和四个签到点,是否存在一个顺序,使得他们能跑够 2500m?如果能,他们还想知道最少需要跑多远?
假设起始点和签到点均分布在平面直角坐标系上,并且都是整点(即横纵坐标均为整数)。假设两点之间的距离均取直线距离。规定输入输出中所有数值的单位为 m。
特别注意:
提示:对于C/C++选手,在引用了头文件math.h/cmath
时,可以使用sqrt()
函数计算一个浮点数的平方根;对于Python选手,表达式a**0.5
即可计算浮点数a
的平方根。
输入
首先输入一行一个整数 t(1\le t\le10^3),代表询问的次数。
对于每个询问,接下来输入 5 行,每行两个整数 x_i,y_i(-10^4\le x,y\le10^4),依次代表起始点和四个签到点的坐标。
输出
对于每个询问,若不存在一个顺序使得他们能跑够 2500m,在一行内输出no
;若存在一个顺序使得他们能跑够 2500m,在一行内输出最少需要跑的总路程(四舍五入取整数)。
样例
标准输入 复制文本 |
2 0 0 0 500 0 -500 500 0 -500 0 100 100 2712 100 800 60 1400 110 2333 123 |
标准输出 复制文本 |
2564 2512 |
标准输入 复制文本 |
1 0 0 50 50 50 50 -50 50 0 2499 |
标准输出 复制文本 |
no |
标准输入 复制文本 |
4 0 0 0 500 0 1000 0 2000 0 2600 0 0 0 5 0 1000 0 2000 0 2500 0 0 300 0 -200 0 700 0 -858 58 0 0 300 0 -200 0 700 0 -800 0 |
标准输出 复制文本 |
2500 no 2519 2500 |
提示
对于样例1的询问1:
起始点是O(0,0),四个签到点分别是A(0,500),B(0,-500),C(500,0),D(-500,0),
如果先选择A,那么沿OA跑到A'(0,400)时,距离该签到点恰为100,此时完成该签到任务,且路途上没有别的签到任务被完成。从A'出发,若再选择B,则沿A'B跑到B'(0,-400)时,完成签到任务,路途上没有别的签到任务被完成。从B'出发,若再选择C,沿B'C跑到C'(421.913119,-62.469505)时,完成签到任务,路途上没有别的签到任务被完成。从C'出发,若再选择D,沿C'D跑到D'(-400.228788,-6.760570)时,完成签到任务,此时所有任务均被完成。总距离为OA'B'C'D'\approx2564.339604,这个选择是唯一大于2500的(其他所有选择只能得到的另两个路程分别为:2143,2310),故答案为2564。
对于样例1的询问2:
起始点是O(100,100),四个签到点分别是A(2712,100),B(800,60),C(1400,100),D(2333,123)
如果先选择A,沿OA跑到A'(2612,100)时,完成该签到任务,路上完成了剩余的所有签到任务。所以总路程为OA'=2512。如果选择其他方案,可以计算出答案均大于2512。本询问所有可能的距离均大于2500。故答案为2512。
对于样例2:注意一开始瞬间完成了三个签到点,只剩下最后一个签到点(0,2499),故只有唯一一种方案,求得路程为2399<2500,故答案为no
。
来源
lr580