zoukankan      html  css  js  c++  java
  • sdut 2441 屠夫与狼

     

    屠夫和狼

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

    题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2441

      一屠晚归,担中肉尽,止有剩骨,途经一狼穴。屠夫在发现狼穴后马上以vp m/s匀速逃跑,狼在屠夫逃跑t秒后以vd/s的速度匀速追赶,每当狼即将追上屠夫时,屠夫会立即向狼扔一块骨头,狼会立即捡起骨头并以相同的速度返回洞穴并花费f秒的时间将骨头藏好,然后以相同的速度继续追赶屠夫。

    设洞穴离屠夫的住处距离为c米,则屠夫担中至少应有多少块骨头才能保证屠夫安全回家?如果狼恰好在屠夫到达家门口的时候追上,则不需要投骨。

    输入

    输入的第一行包含一个整数T(T<100)表示数据组数,每组数据包括五个整数,vp,vd,t,f,c(1 ≤ vp,vd ≤ 100,1 ≤ t,f ≤ 10,1 ≤c ≤ 1000)。

    输出

     每组数据输出一行,包括一个整数,表示需要的最少骨头数。

     

    示例输入

    2
    1 2 1 1 10
    1 2 1 1 8
    

    示例输出

    2
    1

    提示

     
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int zong;
     5     scanf("%d",&zong);
     6     while(zong--)
     7     {
     8         double vp,vd,t,f,c;
     9         scanf("%lf%lf%lf%lf%lf",&vp,&vd,&t,&f,&c);
    10         int sum=0;
    11         if(vp<vd)
    12         {
    13             double x=vd*(vp*t)/(vd-vp);
    14             while(x<c)
    15             {
    16                 sum++;
    17                 x+=vp*(2*x+vd*f)/(vd-vp);
    18             }
    19         }
    20         printf("%d
    ",sum);
    21     }
    22         return 0;
    23 }
    View Code

    首先求出第一次狼追上屠夫时候屠夫已经走的路程:

    先求狼已经走的时间:△t*vd=vp*(△t+t),解得△t=vp*t/(vd-vp);

    所以第一次狼追上屠夫的时候已经走的路程是x=vd*△t=vd*(vp*t)/(vd-vp);

    大循环中:

    每循环一次代表已经追上了,所以:

    狼回狼窝并藏好骨头的时间是:x/vd+f;

    假设狼回狼窝并追上屠夫所用的时间是△t,则可以列出方程:vd*[△t-(x/vd+f)]=x+vp*△t;

    解得:△t=(2*x-vd*f)/(vd-vp);

    则可以得出这段时间屠夫已经走的距离是:△x=vp*△t=vp*(2*x-vd*f)/(vd-vp);

    所以:x=x+△x=x+vp*(2*x-vd*f)/(vd-vp);这就是狼再一次追上屠夫的时候屠夫离狼窝的距离,整个题目得以解出。

  • 相关阅读:
    PHP创建socket服务
    linux配置PS1
    几个常用的linux命令
    MongoDB的分片集群搭建
    django-admin 配置
    django使用mysql数据库
    Django知识
    docker 监控之 cadvisor
    shell 拾遗
    shell 基数数值方法
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3388609.html
Copyright © 2011-2022 走看看