社区讨论
翻译
CF596DWilbur and Trees参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi6o7izv
- 此快照首次捕获于
- 2025/11/20 08:05 4 个月前
- 此快照最后确认于
- 2025/11/20 08:05 4 个月前
CPP
小猪Wilbor特别想当一只海狸,因此他今天打算扮演一只海狸并把树咬断。
在一条直线上有 n 棵树位于任意位置。第 i 棵树位于 wi。
所有的树都是相同的。换句话说,所有的树高度均为 h。由于风的影响,一棵树被砍倒后有 p 的几率向左倒下,也有 1 - p 的几率向右倒下。如果一棵树倒下时撞到了其它树,被撞到的那棵树也会倒下,且方向与撞到它的那棵树相同。当且仅当两棵树的距离严格小于 h 时两棵树才能相撞。
例如,有四棵树分别位于位置 1,3,5,8,并且 h = 3。当坐标为 1 的树倒下时,它撞到了坐标为 3 的树。坐标为 3 的树倒下时它又撞到了坐标为 5 的树。由于坐标为 5 的树和坐标为 8 的树之间距离是 3,因此坐标为 8 的树不会倒下。
只要还有树没有倒下,Wilbor就会有 0.5 的几率选择砍倒最左边的树以及 0.5 的几率选择砍倒最右边的树。如果只剩下一棵树未被砍倒,那么Wilbor一定会把它砍倒。鉴于树场周围全是草,Wilbor想要知道被砍倒的树覆盖的草的长度是多少。请帮帮Wilbor吧。
输入格式:
输入数据的第一行包括两个整数,n (1 <= n <= 2000)和 h (1 <= h <= 10^8)和一个实数 p (0 <= p <= 1),不会超过六位小数。
第二行包括 n 个整数 x1,x2,...,xn (-10^8 <= xi <= 10^8),数据是无序输入的。
输出格式:
输出一个实数表示被砍倒的树所覆盖的长度。输出结果和标准答案最多相差 10^-6。
说明:
在样例一中,我们有 2 棵高度为 2 的树。
https://cdn.luogu.com.cn/upload/vjudge_pic/CF596D/7ea79c02ec83af888c806be42da0defa4e428746.png
一共有三种情况:
1.两棵树都向左倒。可能是右边的树撞倒了左边的树,这种情况的概率为 1/2 · 1/2 = 1/4。也有可能是左边的树先倒下右边的树后倒下,这种情况的概率为 1/4 · 1/2 = 1/8。总概率为 1/4 + 1/8 = 3/8。
2.两棵树都向右倒。分析过程与上一条相同,总概率也为 3/8。
3.左边的树向左倒,右边的树向右倒。总概率为 1 - 3/8 - 3/8 = 1/4。
前两种情况都会覆盖 3 的长度,第三种情况会覆盖 4 的长度。那么答案即为 3 · (3/8) + 3 · (3/8) + 4 · (1/4) = 3.25。
回复
共 4 条回复,欢迎继续交流。
正在加载回复...