• TZOJ--3939: FIFA World Cup 2006(几何公式)


    3939: FIFA World Cup 2006 

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

    描述

    Football is one of the most popular words in 2006.

    Bob cannot go to Germany for the FIFA world cup 2006 and can only watch the TV instead.

    As the following figure, height of the TV is L, and TV is placed at H above Bob's eyes, shown in Figure.

    Bob want to maximaze the angle α. You need to tell Bob x, the distance between the TV and Bob's eyes, when the angle α is maximum.

    Attention please, x>=D (or TV will do harm to Bob).

    输入

    The first line of the input is a positive integer T. T is number of the test cases followed.

    Each test case contains three integers L, H, D (-1000<H<1000, 0<L, D< 1000).

    There may be one or several spaces before or after the integer.

    输出

    The output of the program should consist of one line of output for each test case.

    The output of each test case only contains x rounded to two decimal places past the decimal point, and always showing the two decimal places past the decimal point.

    No any redundant spaces is needed.

    样例输入

    3
    2 -1 10
    1 1 1
    1 -2 1

    样例输出

    10.00
    1.41
    1.41

    题目来源

    TOJ

     

    题目链接:http://tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3939

    题目大意:Bob想要最大的角度观看世界杯,求出这时候的x值。

    题目已经画好了两种情况的图片,根据这两种情况分类讨论。

    第二种情况,若H小于L时,那么X越大角度就会越小,所以这时候的X就是题目要求的最小值D

    若H大于L是就和第一种情况一样。

    第一种情况,x=sqrt(h*H+H*L)是取最小值,证明过程如下:

     

    至于为什么是这个点是极小值,其实感觉一下点越远角度越小,越近角度也越小,所以是一个中间值是角度的最大值,f(x)的极小值,这个不做证明了,下图给出f(x)的大致图像

     

    Update:感谢队友赞助的解法,证明过程如下:

     

    emmm,我几何全忘了,有简单方法证明可以联系我,告诉我一下,本人不擅长向量法。

     

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	double l,h,d,p;
    	int n;
    	scanf("%d",&n);
    	while(n--)
    	{
    		scanf("%lf %lf %lf",&l,&h,&d);
    		if(-h<=l&&h<0)p=d;
    		else p=sqrt(l*h+h*h);
    		if(p<d)p=d;
    		printf("%.2lf
    ",p);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    验证码
    九九乘法表
    P121 6.7 第一题和第二题
    二分搜索法(转载自vanezkw)
    用for循环打印菱形
    用while循环语句计算1!+2!+……20!之和
    数的阶乘之和
    9.29
    doGet与doPost的区别
    JavaScript习题
  • 原文地址:https://www.cnblogs.com/Anidlebrain/p/10055997.html
Copyright © 2020-2023  润新知