牛客小白月赛6 A 鲲 数学

链接:https://www.nowcoder.com/acm/contest/136/A
来源:牛客网

    北冥有鱼,其名为鲲,鲲之大,不知其几千里也。

                                        ——《庄子·逍遥游》

    HtBest有一条可爱的小鲲,HtBest想和与小鲲比赛游泳,我们可以把游泳池看成一个圆环,两人从起点游一圈回到起点即可完成比赛。两人在距离小于k时(距离指的是在环上的距离,而非直线距离),他们会互相监督对方有没有全速向前游,如果发现有一方没有全速向前游,则视为作弊,聪明的HtBest为了省力(更为了赢得比赛),可以选择在两者相距超过k的时候,立马掉头反向游以更快到达起点,HtBest想让你求出小鲲最少比HtBest提前多长时间完成比赛。(若HtBest比小鲲先完成比赛,输出负数)

    说明:小鲲不会作弊。

输入描述:

一行,包含四个正整数,两两之间用空格分开:L(游泳池周长)、k(互相监督距离)、a(小鲲速度)、b(HtBest速度)。
所有输入数据均不超过1e9。

输出描述:

一行,包含一个数,表示小鲲最少比HtBest提前多长时间完成比赛。(保留两位小数)。

示例1

输入

复制
4 3 2 1

输出

复制
2.00

说明

小鲲用时4/2=2,HtBest用时4/1=4,4-2=2。
示例2

输入

复制
10 2 3 1

输出

复制
-1.33

说明

出发1单位时间后,小鲲跑了3,HtBest跑了1,此时互相监督无效,HtBest作弊反向游,第2单位时间后,HtBest游回终点,小鲲用时10/3=3.33,2-3.33=-1.33。



分析:
  这题目连数据范围都没有。。
  要考虑几种特殊情况:
   b的速度大于a的时候
   k的距离大于l时
   l的距离不够a回到终点时
  上面几种情况下直接通过速度距离计算出时间就行
  不满足上面的情况的话,b走的时间就是2*k/(a-b),a的时间就是距离除以速度
AC代码:
#include <map>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define ls (r<<1)
#define rs (r<<1|1)
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
const ll maxn = 1e6+10;
const ll mod = 1e9+7;
const double pi = acos(-1.0);
const double eps = 1e-8;
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll n, m, a, b;
    while( cin >> n >> m >> a >> b ) {
        double num1 = (n*1.0)/a;
        double t = (m*1.0)/(a-b);
        if( a > b && m < n && 2*t*a < n && t*b*2 < n ) {
            printf("%.2lf\n",2*t-num1);
        } else {
            double num2 = (n*1.0)/b;
            printf("%.2lf\n",num2-num1);
        }
    }
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/l609929321/p/9499781.html