【2020.10.30 洛谷团队赛 普及组】T4 U138096 租车去春游

102 篇文章 1 订阅
102 篇文章 0 订阅

题目描述
M小学组织小朋友们去春游,一共有n个小朋友参加这次集体活动,他们需要走 s 米的路程才能到达 目的地。每个学生的行走速度是 v1,为了减少在路程上消耗的时间,学校决定租一辆公交车,公交车 的座位可以容纳 k 个人,为了保证安全,公交车不能容纳k人以上,公交车的行驶速度是 v2。为避免 小朋友们出现晕车的情况,每个学生只能坐不超过1次的公交车。

公交车的停靠、倒车时间以及小朋友的上下车时间都可以忽略不计。现在请帮帮老师们确定n个学生 到达目的地所需的最短时间。


输入格式
只有一行:包括五个正整数 n , s , v 1 , v 2 n,s,v1,v2 nsv1v2和k,分别代表学生数量、路程长度、学生行走速度、汽车 驾驶速度和汽车可容纳人数。 ( 1 < = n < = 10000 , 1 < = s < = 1 e 9 , 1 < = v 1 < v 2 < = 1 e 9 , 1 < = k < = n ) (1 <= n <= 10000,1 <= s <= 1e9,1 <= v1 < v2 <= 1e9,1 <= k <= n) 1<=n<=100001<=s<=1e91<=v1<v2<=1e91<=k<=n

输出格式
输出所有学生可以到达目的地的最短时间,误差不能超过0.000001

输入输出样例

输入 #1
5 10 1 2 5
输出 #1
5.0000000000

输入 #2
1 1 1 2 1
输出 #2
0.5000000000

输入 #3
10 20 1 2 5
输出 #3
14.0000000000

说明/提示
数据范围
对于50%的数据, 1 < = s < = 1000 , 1 < = v 1 < v 2 < = 1000 1 <= s <= 1000,1 <= v1 < v2 <= 1000 1<=s<=10001<=v1<v2<=1000
对于75%的数据, 1 < = s < = 10000 , 1 < = v 1 < v 2 < = 10000 1 <= s <= 10000,1 <= v1 < v2 <= 10000 1<=s<=100001<=v1<v2<=10000
对于100%的数据, 1 < = s < = 1 e 9 , 1 < = v 1 < v 2 < = 1 e 9 1 <= s <= 1e9,1 <= v1 < v2 <= 1e9 1<=s<=1e91<=v1<v2<=1e9


样例解释
样例一:
5个学生可以全部上公交车,并且时间是 10 / 2 = 5 10 / 2 = 5 10/2=5
样例二:
1个学生可以全部上公交车,并且时间是 1 / 2 = 0.5 1 / 2 = 0.5 1/2=0.5
样例三:
10个学生,公交车一次可容纳5人,所以公交车需要接两次学生。第一次公交车带5个学生走到12 米,共 12 / 2 = 6 12 / 2 = 6 12/2=6分钟,5个学生下车后走到目的地需要 ( 20 − 12 ) / 1 = 8 (20 - 12)/ 1 = 8 2012/1=8分钟,第一批学生到达终 点需要14分钟。在12米处停车之后,公交车回去接剩下的学生,公交车和第二批学生在8米处相遇, 此时第二批学生走了8 / 1 = 8分钟,公交车带着第二批学生直接到达目的地,第二批学生坐车时间为 ( 20 − 8 ) / 2 = 6 (20 - 8)/ 2 = 6 208/2=6分钟,第二批学生共耗时 8 + 6 = 14 8 + 6 = 14 8+6=14分钟。第一批学生和第二批学生用时相同,皆 为14分钟


解题思路
看问题目后我人都傻了,这是小奥中一道非常经典的 来回接送行程问题呀。。。
被小奥摧残了那么多年,终于让它有用武之地了。由于我太懒了,解题思路过于繁琐,SO,康康上面那篇博客吧。


代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<queue>
using namespace std;
long double ans,w,t,n,s,v1,v2,k;
int main() {
	cin>>n>>s>>v1>>v2>>k;
	w=ceil(n*1.0/k);
	k=v2*1.0/v1*1.0;
	t=1+(k-1)*1.0/2+w-1;
	t=s*1.0/t;
	ans=(w-1)*t*1.0/v1*1.0+(1+(k-1)/2)*t*1.0/v2*1.0;
	cout<<fixed<<setprecision(10)<<ans<<endl;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值