牛客练习赛63之B——牛牛的鱼缸(附图解析)

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
题目描述

牛牛有一个长为; l;l,宽为1,高为; h;h的鱼缸,现在他想要在鱼缸中盛一些水。他想要知道这个鱼缸最多能够放多少水。

当然这个问题太过于简单,所以牛牛将这个鱼缸放到了一个长为; L;L,高为; H;H的斜坡上面,如图所示,鱼缸宽度为1的这条边紧紧靠在斜坡与地面的交界线上。
牛客练习赛63之B——牛牛的鱼缸(附图解析)_第1张图片
在不允许移动鱼缸与斜坡的情况下。鱼缸最多能够放多少水?

忽略斜坡与鱼缸因为重心的影响而导致整个鱼缸打翻的情况,你可以认为鱼缸是粘在斜坡上面的,而斜坡粘在地面上无法移动。

输入描述:
仅一行,输入四个整数h,l,H,L ( 1≤h,l,H,L≤pow(10,4) ),表示鱼缸的高度与长度,斜坡的高度与长度。
输出描述:
请输出一个实数,表示鱼缸最多能够放多少水,请输出水的体积。

示例1
输入
1 2 1 2

输出
1.00000000

备注:
你的答案正确,当且仅当你输出的值与答案的相对误差小于10^{-6}10 。

题解:几何大水题,注意分类讨论,em…最好一步步用代码表示,不要学我化简,之前还因为化简错误卡着了qwq【这个x表示由鱼缸的左上顶点水平射到三角行锥面的长度在三角形锥面上的投影】。
牛客练习赛63之B——牛牛的鱼缸(附图解析)_第2张图片

#include 
#define ll long long 
#define db double
using namespace std;
ll h,l,H,L;

int main()
{
    cin>>h>>l>>H>>L;
    db x=L*h/1.0/H;
    db v;
    if(x<l) v=L*h*h/2.0/H; 
	else if(x==l) v=h*l/2.0;
	else v=(h*(x-l)/x+h)*l/2.0;
    printf("%.11lf",v); 
   //  cout<
    return 0;
}

你可能感兴趣的:(题解,几何,图形思维)