炫酷双截棍 (基础几何)

链接: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()
{
	int n,m,j,k,i,T;
	double a,b ,c,sum,ans,x,y;
	cin>>a>>b;
	double Max = a+b;
	double Min = fabs(a-b);
	cin>>T;
	while (T--)
	{
		cin>>x>>y;
		double len = sqrt(x*x+y*y);
		if (len<=Max&&len>=Min)
		printf("0.00000000\n");
		else
		{
			printf("%.8lf\n",min(fabs(len-Min),fabs(len-Max)));
		}
	}
	
	return 0;
 } 

 

posted @ 2019-01-31 18:03  RomanticChopin  阅读(138)  评论(0编辑  收藏  举报
-->
Live2D