链接:https://www.nowcoder.com/acm/contest/136/A
来源:牛客网
北冥有鱼,其名为鲲,鲲之大,不知其几千里也。
——《庄子·逍遥游》
HtBest有一条可爱的小鲲,HtBest想和与小鲲比赛游泳,我们可以把游泳池看成一个圆环,两人从起点游一圈回到起点即可完成比赛。两人在距离小于k时(距离指的是在环上的距离,而非直线距离),他们会互相监督对方有没有全速向前游,如果发现有一方没有全速向前游,则视为作弊,聪明的HtBest为了省力(更为了赢得比赛),可以选择在两者相距超过k的时候,立马掉头反向游以更快到达起点,HtBest想让你求出小鲲最少比HtBest提前多长时间完成比赛。(若HtBest比小鲲先完成比赛,输出负数)
说明:小鲲不会作弊。
输入描述:
一行,包含四个正整数,两两之间用空格分开:L(游泳池周长)、k(互相监督距离)、a(小鲲速度)、b(HtBest速度)。
所有输入数据均不超过1e9。
输出描述:
一行,包含一个数,表示小鲲最少比HtBest提前多长时间完成比赛。(保留两位小数)。
示例2
说明
出发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; }