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<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1010000
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-8
using namespace std;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
double dpow(double a,ll b){double ans=1.0;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;}
//head
int main()
{
    int t,cas=0;
    scanf("%d",&t);
    while(t--)
    {
        double x,y,L;
        scanf("%lf%lf%lf",&x,&y,&L);
        if(L==0.0)
        {
            printf("Case %d: %.7lf\n",++cas,max(x,y));
            continue;
        }
        double l=0.0,r=max(x,y),mid;
        //cout<<l<<" "<<r<<endl;
        while(l<r)
        {
            mid=(l+r)/2.0;
            double j1=acos(mid/x),j2=acos(mid/y);
            double h=(mid*tan(j1)*tan(j2))/(tan(j1)+tan(j2));
            //cout<<h<<" "<<mid<<endl;
            if(fabs(h-L)<eps)
                break;
            if(h>L)
                l=mid;
            else
                r=mid;
        }
        printf("Case %d: %.7lf\n",++cas,mid);
    }
    return 0;
}
时间: 2024-10-09 20:39:18

Lightoj 1062 Crossed Ladders (二分)的相关文章

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

LightOJ 1062 - Crossed Ladders 基础计算几何

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

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

LightOJ 1307 Counting Triangles 二分查找

[题解整理]二分题 题目类型: 二分查找: 二分答案. 大致解题思路: 查找注意有序和返回值: 浮点数注意精度: 整数注意返回值,建议另外维护一个变量,用于储存可行解. 题目 分类 传送门 WA点 poj 2785 二分查找 题解 lightoj 1088 二分查找 题解 lightoj 1307 二分查找 题解 longlong poj 2456 整数二分答案 题解 poj 3104 整数二分答案 题解 poj 3258 整数二分答案 题解 poj 3273 整数二分答案 题解 lightoj

UVA - 10566 Crossed Ladders

给出x,y,c,求?的长度 我的做法: 首先写了一个关于x,y,c,?的表达式,发现拆开后是解一个四元一次方程,比较麻烦 发现表达式的一边是个关于?的单调递减函数后,就用二分来解了 我的代码: #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath&g

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

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

Codeforces 1062 - A/B/C/D/E - (Undone)

链接:http://codeforces.com/contest/1062 A - Prank - [二分] 题意: 给出长度为 $n(1 \le n \le 100)$ 的数组 $a[1 \sim n]$,且满足 $1 \le a[1] < a[2] < \cdots < a[n] \e 1000$.现在JATC要擦掉其中一段连续的数字,但是要求能够通过剩余的其他数字,推断出擦掉的数字是什么.求JATC能擦掉的最长长度. 题解: 其实 $O(n)$ 就可以求出能擦掉的最长长度,但是因为

HOJ 题目分类

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