链接: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);
}