- 题目来源
描述
曾几时,和木姑娘一起在独墅湖边的漫步,就成为了一个令我无限向往的梦。
现在,这也只能永远只是梦了。木姑娘已经找到了属于她自己的幸福。
夜晚的独墅湖边很凉,沿岸的n盏路灯将湖水圈在了光影之中。
路灯被编号为0到n-1,围成一圈,0号路灯与n-1号路灯相邻。
我独自坐在第0盏路灯下,却看到第x盏路灯下倚靠着的女孩。
我想要过去找她,但是夜晚让我迷失了方向。
每一分钟,我总会随机地走向相邻的某一柱路灯,究竟要多久才能走过去?究竟那女孩是不是木姑娘,还是我的幻境。格式
输入格式
第一行给定整数T( ≤ 30),表示数据组数。
之后T行,每行给出2个整数n和x( 0≤x<n≤1000 )
输出格式
对于每一组数据,输出从0走到x期望情况下所需多少分钟,四舍五入保留到小数点后第四位。样例输入
3
3 2
5 4
10 5样例输出
2.0000
4.0000
25.0000限制
对于30%的数据,n ≤ 10;
对于100%的数据,n ≤ 1000;题解
本题与数学期望有关。
我们定义 E(ξ) 表示与终点距离为 ξ 的点走到终点所需步数的期望值,那么显然有 E(0)=0 。
对任意的 ξ ,考虑 ξ+1 与 ξ−1 ,不难发现从 ξ 走到 ξ+1 或者 ξ−1 其中一个的概率均为0.5,走到这两个点中任意一个所需步数期望为1,那么 E(ξ) 可由 E(ξ+1) 和 E(ξ−1) 确定。
实际上,ξ=(ξ+1)+(ξ−1)2从而E(ξ)=E(ξ+1)+E(ξ−1)2+1
代入 E(0)=0 ,有 E(1)=E(2)2+1 ,即 E(2)=2E(1)−2∗1 ,然后可计算得 E(3)=3E(1)−3∗2 , E(4)=4E(1)−4∗3,…
最终, E(ξ)=ξE(1)−ξ(ξ−1)
又因为原图呈环状,所以 E(ξ)=E(n−ξ) , ξ=1 代入上式,有 E(ξ)=ξ(n−ξ) ,计算该式的时间复杂度为 O(1) ,问题解决。Code
#include <cstdio>
#include <algorithm>
using namespace std;
int T, n, x;
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &x);
printf("%d.0000\n", x * (n - x));
}
return 0;
}