列表

详情


NC15760. 郊游

描述


2018年萌新刚升为队长,于是带领校队的n名队员一起去郊游,他选定的地点与学校的距离为l米。
为了更快达到目的地,萌新计算了经费后为大家租赁了一辆限乘k人的车,队员们都非常不满,但对于萌新队长敢怒不敢言。
现已知队员走路的速度为v1,车的速度为v2,每位队员只能上车一次。
你的任务是帮助萌新确定到达目的地所用的时间(保留10位小数,考虑上车下车、车掉头时间不计)

输入描述

第一行输入一个整数m,代表m组数据。
接下来m行,输入5个正整数n,l,v1,v2,k。
其中1≤m≤1000,1≤n≤10000, 1≤l≤109, 1≤v1<v2≤109, 1≤k≤n

输出描述

输出一行,为一个实数。代表萌新确定到达目的地所用的时间(保留10位小数,考虑上车下车、车掉头时间不计)

示例1

输入:

1
3 6 1 2 1

输出:

4.7142857143

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 348K, 提交时间: 2019-02-16 16:39:12

#include <bits/stdc++.h>
using namespace std;

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		int n, k;
		double l, v1, v2;
		scanf("%d%lf%lf%lf%d", &n, &l, &v1, &v2, &k);
		int p = (n - 1) / k;
		long double x = l / (p * (long double)(2 * v1 / (v1 + v2)) + 1);
		printf("%.10Lf\n", x / v2 + (l - x) / v1);
	}
}

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 224K, 提交时间: 2019-03-14 18:30:31

#include "stdio.h"

int main(){
    int m,n,k,r;
    double v1,v2,t,tl,l,g;
    scanf("%d",&m);
    while(m--){
        scanf("%d %lf %lf %lf %d",&n,&l,&v1,&v2,&k);
        r = n/k + ((n%k) ? 1:0);
        g = l*(v1+v2)/((2*r-1)*v1+v2);
        t=(l-g)/v1+g/v2;
        printf("%.10f\n",t);
    }
    return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 4ms, 内存消耗: 476K, 提交时间: 2022-11-10 20:36:28

#include<bits/stdc++.h>
using namespace std;

void solve()
{
    int n,l,k;
    double v1,v2;
    cin>>n>>l>>v1>>v2>>k;
    int res=(n+k-1)/k;
    double s=(v1+v2)*l/(2*v1*res-v1+v2);
    
    printf("%.10f\n",s/v2+(l-s)/v1);
}
signed main()
{
    int t;
    cin>>t;
    while(t--)solve();
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 500K, 提交时间: 2020-03-11 21:03:59

#include<cstdio>
int main()
{
	int n,k;
	double l,v1,v2;
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&k);
		int g=(n+k-1)/k;
		double a=(v1+v2)*l/(v1*(2*g-1)+v2);
		printf("%.10f\n",a/v2+(l-a)/v1);
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 30ms, 内存消耗: 3404K, 提交时间: 2020-04-28 18:59:55

m=int(input())
while m:
    m-=1
    try:
        n,l,v1,v2,k=map(int,input().split(' '))
    except:
        pass
    if n%k==0:
        p=n//k
    else:
        p=n//k+1
    x=(v1+v2)*l/(v2+(2*p-1)*v1)
    t=x/v2+(l-x)/v1
    print('%.10f'%t)

上一题