CS 300 Diesel Train 连续型期望(积分)

本文探讨了一道关于火车加油的问题,火车头随机放置在区间[0,D]内,需计算火车因缺油被推到最近加油站的距离期望。考虑加油站坐标排序后形成的区间,并讨论了火车在不同情况下的移动方向及推移距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CS 300
题意:起点为0 终点为D.有一个长度为L的火车,初始火车头在起点0.
有n+2个加油站,起点和终点也是加油站.第i个加油站在点x[i].
火车的任意一个部位在加油站时 都可以加油,如果火车没有油了,则火车会被推到离它最近的加油站上.


现在把火车头 随机仍到了[0,D]的某个位置上,问火车被推的距离期望是多少? n<=1e5,D<=1e9.


先将加油站坐标从小到大排序.
当火车头落在x:[p[i],p[i+1]]之间
若p[i+1]-p[i]<=L 则火车有部分若在加油站上.


否则当x=[p[i]+L,(p[i]+L+p[i+1])/2]时 火车往左推 推的距离为[0,(p[i+1]-p[i]-L)/2]
当x=[(p[i]+L+p[i+1])/2,p[i+1]]时 火车向右推, 推的距离为[(p[i+1]-p[i]-L)/2,0]

此时连续形期望积分计算的是一个等腰三角形的面积S=1/4*(p[i+1]-p[i]-L)^2 最后在除以D(???)

#include <bits/stdc++.h>
using namespace std;
typedef long double db;
const int N=2e5+5;
int p[N],D,L;
int n;
int main()
{
    cin>>D>>L>>n;
    for(int i=1;i<=n;i++)
        cin>>p[i];
    p[++n]=0;
    p[++n]=D;
    sort(p+1,p+1+n);
    db ans=0;
    for(int i=2;i<=n;i++)
    {
        long long t=(p[i]-p[i-1]-L);
        if(t>0)
        ans+=t*t;
    }
    ans/=4;
    ans/=D;
    printf("%.10Lf\n",ans);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值