南阳理工acm449 不再爱你……

来源:互联网 发布:热血传奇首饰钢纹数据 编辑:程序博客网 时间:2024/05/24 07:07

不再爱你……


描述

现在有一个圆柱形水杯,里面装满了水,在它的底部有一个小洞,通过一些简单的物理知识我们可以知道:
1、 由于重力的原因,水一定会从小洞流出来。
2、 小洞漏水的速度是和小洞那个位置的水所受到的压力大小成正比的。进而,我们可以知道,漏水的速度V和水面的的高度h成正比,简单起见,我们就直接让v=h吧(只是数值上的相等,v我们认为是单位时间漏出的水的体积,与小孔的大小无关,物理好的童鞋就不要深究了^_^)。
3、 如果你非常喜欢一个人,理论上在水漏完之前你一定不再喜欢TA了。
好吧,扯远了,我们现在的问题是,如果原来倒入了高度为h的水,从水开始流出时计为0时刻,如果在某个时间t,你不再只关心你喜欢的那个TA了,看了下水杯水面高度还有h1,那么你能计算出这个杯子的底面积s吗?

输入
第一行一个数n,表示测试数据组数。
接下来有n行数,每行数有三个数,分别表示最初倒入水面的高度h,时间t,t时刻的水面高度(所有物理量均按照国际单位制给出,且不含单位)。
输出
每组测试数据给出相应的水杯的底面积,四舍五入保留小数点后面一位数字即可,每组输出占一行。
样例输入
210 10 51 3 0.5
样例输出
14.44.3
来源

原创

想法:

由题意得

用s表示底面积

用f(1)$(h1,h)表示(对1*dh在h1到h上进行积分)

t*v==s*f(1)$(h1,h)

又v==h

所以t==s*f(1/h)$(h1,h)

s==t/(ln h1-ln h)

代码:

#include <stdio.h>
#include <math.h>
int main()
{
    double h,h1,t;
    int n;
    scanf("%d",&n);
    while (n--)
    {
    scanf("%lf%lf%lf",&h,&t,&h1);
    printf("%.1lf\n",t/log(h/h1));
    }
    return 0;
}

原创粉丝点击