UVA - 10566 Crossed Ladders

给出x,y,c,求?的长度

我的做法:

首先写了一个关于x,y,c,?的表达式,发现拆开后是解一个四元一次方程,比较麻烦

发现表达式的一边是个关于?的单调递减函数后,就用二分来解了

我的代码:

#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const double eps=1e-4;
int main()
{
	double l,r,m,a,b,x,y,c;
	while(cin>>x>>y>>c)
	{
		l=0;
		r=min(x,y);
		while(r-l>eps)
		{
			m=(l+r)/2;
			a=sqrt(pow(x,2)-pow(m,2));
			b=sqrt(pow(y,2)-pow(m,2));
			if(a*b/(a+b)<c)
				r=m;
			else
				l=m;
		}
		printf("%.3lf\n",l);
	}
}
时间: 2024-12-22 09:24:42

UVA - 10566 Crossed Ladders的相关文章

UVA10566 Crossed Ladders (数学+二分)

UVA10566 Crossed Ladders Description如图1,多组数据,输入x,y,c,求出t的大小,保留三位小数 Hint由相似三角形的知识,我们用两种方法分别表示出图中Lx,就可以得出一个等式关系:$$\frac{1}{b}+\frac{1}{a}=\frac{1}{c} ??(1)$$又有等式$$a=\sqrt{x^2-t^2},b=\sqrt{y^2-t^2}$$把这两式代入(1)式可以得到$$\frac{1}{\sqrt{x^2-t^2}}+\frac{1}{\sqr

UVA 10566 &amp;&amp; POJ 2507 Crossed Ladders (几何)

题意:两栋楼之间有两个梯子,如图中的虚线所示,一个梯子的长度为x,另一个梯子的长度为y,两个梯子的交点离地面的高度为c,问两栋楼之间的距离. 看到这类的几何题,配有几张情景图,总是有一种莫名的亲切感,有一种想秒A的冲动>=< 解题思路: 在纸上画出图,设宽度为w,交点距左楼距离为a,则根据三角形相似可以推出: 将第二个方程带入到第一个,化简得到:   1=c/sqrt(x*x-w*w)+c/sqrt(y*y-w*w);将得到方程二分求解,即可得到题目所求 代码: #include <st

LightOJ 1062 - Crossed Ladders 基础计算几何

http://www.lightoj.com/volume_showproblem.php?problem=1062 题意:问两条平行边间的距离,给出从同一水平面出发的两条相交线段长,及它们交点到水平面的高. 思路:计算几何怎么可能直接算出答案orz解了好久方程觉得不对,应该是二分枚举平行边的距离,通过相似三角形,算出交点的高,与题目比较,小于误差范围就行了. /** @Date : 2016-12-10-18.18 * @Author : Lweleth ([email protected])

Lightoj 1062 - Crossed Ladders【二分】

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1062 题意: 两个梯子靠墙放,一个长度是x一个长度是y,它们交点到地面的距离是c.求这两个梯子底部的距离. 思路:二分底部的距离t,往计算t' ,根据t和t'的大小关系更新上下界即可. 设宽为mid,那么可以求得 c/sqrt( y^2 - mid^2 ) + c/sqrt( x^2 - mid ^2 ) = 1 代码: #include <stdio.h> #includ

poj 2507 Crossed ladders 二分解方程

题意: 给两把梯子的长度x,y和他们交点的高度c,求两梯子底部之间的距离. 分析: 化简后得方程c/sqrt(x^2-w^2)+c/sqrt(y^2-w^2)=1,f(w)=c/sqrt(x^2-w^2)+c/sqrt(y^2-w^2)单调增,可以二分解,注意精度. 代码: //poj 2507 //sep9 #include <iostream> #include <cmath> using namespace std; const double eps=1e-8; int ma

Lightoj 1062 Crossed Ladders (二分)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1062 题意:两根棍子斜放在墙上,给你棍子的长度和他们交点距离地面的高度 ,求两个墙之间的距离 思路:直接枚举距离二分即可 ac代码: #include<stdio.h> #include<math.h> #include<string.h> #include<stack> #include<set> #include<q

几何基础专题

UVA 11437 Triangle Fun UVA 11800 Determine the Shape 四边形判定 UVA 11646 Athletics Track UVA 11817 Tunnelling the Earth 球面距离 UVA 1473 Dome of Circus UVA 11524 InCircle UVA 11731 Ex-circles 旁切圆 UVA 12300 Smallest Regular Polygon UVA 10566 Crossed Ladders

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

uva 10026 Problem C: Edit Step Ladders

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=970 通过对每一个字符串,每一个位置进行枚举三个操作,然后二分查找操作后的字符串是否存在,dp记录. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define N 25