每日咕咚

链接:https://ac.nowcoder.com/acm/contest/7872/B
来源:牛客网

题目描述

为了让每天的锻炼任务变得更加有趣,农农和林林给ZAFU的学生们制定了一个 有趣的跑步规则,内容如下:
1、假定现在有N个学生在操场跑步
2、在一开始的时候,N个学生需要排成一列,前后间距为 X,那么队列总长为 (N-1)* X 3、处于队尾的学生会加速追赶前面的学生,在这个过程中其余学生保持平均速度 V 不变,(队尾的同学超过所有同学后,比第二名同学领先X的间距时才视为完成一次追赶,此时当前的队尾同学才开始追赶) 当所有学生都完成一次追赶之后,锻炼结束。 现在告知每一位学生在不同位置追赶时的速度 Uij,请你帮助计算学生们完成锻炼的期望时长。

输入描述:

N X V
U11---------U1N



UN1--------UNN
1 <= N <= 500 (N为正整数)
0 < X <= 10000 (X为浮点数)
0 < V <= 1000 (V为浮点数)
V + 1 < Uij <= 2000 (Uij为浮点数)
输出描述:
RES (表示期望时长,保留两位小数)

思路

一道数学题,有n个人一共有n!种排队方式,先确定一个人的位置,他在这个位置上其他人有(n-1)!种站法,也就是说他在这个位置上跑步所要花费时间的数学期望是dist(距离=n*x)/(u-v)相对速度 *(n-1)!/n!,同理,然后把所有人在每个位置上所花的时间相加,就是答案了

#include<stdio.h>
#include<iostream>
#include<vector>
#include<math.h>
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
	int n;
	int temp=1;	
	double x,v;
	scanf("%d%lf%lf",&n,&x,&v);
	
	double dist=n*x;
	double res=0;
	for(int j=1;j<=n;j++){
	for(int i=1;i<=n;i++){
	    double u;		
		scanf("%lf",&u);
		res+=dist/(u-v);		
	} 
}
	printf("%.2f",res/n);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值