链接:https://ac.nowcoder.com/acm/contest/331/A
来源:牛客网
小希现在手里有一个连着的两块木条,长度分别为l1l1,l2l2,木条之间有一个无摩擦的连接点,木条之间可以相互转动,小希将其称之为双截棍。
现在小希把长为l1l1的木条的一端放在原点(0,0),任意转动这两根木条,小希想知道,是否有可能通过一种转动方式使得双截棍的另一端到达指定点呢?
如果不能,请输出所有能到达的点中离目标点最近的距离。
输入描述:
第一行输入一个两个正整数l1l1,l2l2,表示木条长度。 第二行输入一个正整数T,表示询问次数。 随后T行,每行两个实数xixi,yiyi表示目标点的坐标。 l1,l2≤1000l1,l2≤1000 T≤1000T≤1000 |x|,|y|≤10000|x|,|y|≤10000
输出描述:
对于每次询问,如果可以到达,输出0,如果无法到达,给出所有能到达的点中离目标点最近的距离。 你的答案将被认为是正确的,如果相对误差不大于1e-6。
示例1
输入
复制
23 13 3 15 1 40 0 0 0
输出
复制
0.00000000 4.00000000 10.00000000
代码:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x,y,ans,s;
int a,b,t;
cin>>a>>b;
cin>>t;
while(t--){
scanf("%lf%lf",&x,&y);
s=sqrt(x*x+y*y);
if(s<=(a+b) && s>=abs(a-b))
ans=0;
else if(s>(a+b))
ans=s-(a+b);
else
ans=abs(a-b)-s;
printf("%.8lf\n",ans);
}
return 0;
}