TOJ 2814

news/2025/1/11 8:59:31/


题目连接:

http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2814


题目类型:

数论 - 计算几何


数据结构:


思路分析:


要求的L的最大值

首先需要建立关于L的方程式



1. 判定当影子全部在地面上的情况,

也就是 x + L <= D

L = h * x / ( H - h )

可知 L 为单调递增函数

所以 x 的值需要尽可能的大

最大达到 x + L = D

也就是 x = ( D * H - h * D ) / H  的时候

这时候 L = h * D / H;



2. 投影出现在墙上的情况

设地和影子虚像的总长为 K

那么 地上未呈现的影子长度为 K - D

地上已呈现的影子长度为 D - x


所以 L 的总长为 地上这部分加上墙上这部分

得 L = ( D - x ) + ( ( H - h ) * ( K - D ) ) / x

    K = H * x / ( H - h )


联立方程 得

L = ( -1 * x * x + ( H + D ) * x + ( h * D - D * H ) ) / x

要求L的最大值 必须点求的 x 的极值点

对L求导

得 L' = -1 + ( -1 ) *  ( h * D - D * H ) / ( x * x ) = 0

     1 = D * ( H - h ) / ( x * x )

     x = sqrt( D * ( H - h ) ) 

所以 x 等于 sqrt( D * ( H - h ) )  时  ( D -  h * D / H <= x <= D )

L取得最大值


比较两种情况的最大值

能得出 最后的答案


证明:


源代码:

#include <iostream>
#include <stdio.h>
#include <math.h>using namespace std;int main()
{int t;double H, h, D;scanf( "%d", &t );while( t -- ){scanf( "%lf%lf%lf", &H, &h, &D );double x = D >= sqrt( D * ( H - h ) ) ? sqrt( D * ( H - h ) ) : D;if( x < ( D - h * D / H ) ){x = D - h * D / H;}printf( "%.3lf\n", max( h * D / H, ( - x * x + ( H + D ) * x + D * ( h - H ) ) / x ) );}return 0;
}



http://www.ppmy.cn/news/242163.html

相关文章

hdu 2524

矩形A B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2917 Accepted Submission(s): 2190 Problem Description 给你一个高为n &#xff0c;宽为m列的网格&#xff0c;计算出这个网格中有多少个矩形&…

hdu2248

纷菲幻剑录 之 十年一剑 Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 497 Accepted Submission(s): 299 Problem Description 黄沙点点扬剑处&#xff0c;流光一瞬已千年...... 带着最初的梦想&#xff…

hdu2482

/* 分析&#xff1a; 我的方法是字典树BFS。 单词比较多&#xff0c;就用字典树了&#xff0c;而边权是1&#xff0c;所以 直接用BFS喽&#xff0c;就不用写最短路了。 第一次MLE了&#xff0c;是因为怀疑name里面可能大小写 都有&#xff0c;字典树就开大了&#xff0c;但事实…

P124t39

#include<stdio.h> #include<math.h> int fun(int x,int n) {int a;apow(x,n);return a; } void main() {int x;int n;scanf("%d,%d",&x,&n);printf("%d",fun(x,n)); }

hdu2814

链接&#xff1a;点击打开链接 题意&#xff1a;求出F(a^b)^(F(a^b)^(n-1))%c(F为斐波那契数的值) 代码&#xff1a; #include <iostream> #include <stdio.h> #include <algorithm> #include <math.h> using namespace std; unsigned long long f[…

hdu 2821 pusher 4.3.7

过题如练级。去成都打了个boss被完虐。so开始好好刷怪了……大概。 Pusher Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others) Total Submission(s): 45 Accepted Submission(s): 20 Problem Description PusherBoy is an online game htt…

HDU 2289 Cup

http://acm.hdu.edu.cn/showproblem.php?pid2289 题目大意&#xff1a;这道题就是给你一个圆台&#xff0c;里面装了一些水&#xff0c;现在告诉你圆台上下底半径&#xff0c;高度&#xff0c;水的体积&#xff0c;问你水的高度是多少。 解题思路&#xff1a;数学题&#xff0…

hdu2874

/* 分析&#xff1a; LCA&#xff0c;我这个用的是Tarjan离线的&#xff0c;不懂的可以看lrj的黑书&#xff0c; 在讲树的部分讲到的。 以前写过这个题&#xff0c;记得当时莫名其妙的tle了 。。 2013-06-14 */ #include"iostream" #include"cstdio" #incl…