原题:http://codeforces.com/problemset/problem/712/E
转/修改:http://www.cnblogs.com/DreamlessDreams/p/9030968.html
题意:
有 n 个赌场,第 i 个赌场的胜率为 Pi,在第 i 个赌场若取胜则到达第 i+1 个赌场,反之到达第 i−1 个赌场,定义统治赌场 L...R 为从赌场 LL 开始,从赌场 R+1结束且期间没有到达过 L 前面的赌场 (没有在赌场 L输过),有 q 次操作,修改一个赌场的胜率或者询问统治赌场 L...R的概率
我们定义 f(i)为从i走到目标地点的概率
显然当询问 (L,R)时有:
一,f(L)为从L走到R+1的概率
二,f(L−1)=0,f(R+1)=1
我们要求的答案为f(L)
根据题意有L<=i<=R,
从i到R+1的概率 = 到达下一场,从下一场i+1到R+1的概率 + 输掉这场,退回并从i-1到R+1的概率
即f(i)=Pif(i+1)+(1−Pi)f(i−1)
则 f(i)−f(i−1)=Pif(i+1)+(1−1−Pi)f(i−1)
=Pi(f(i+1)−f(i−1))
定义 g(i)=f(i)−f(i−1)
则有 g(i)=Pi(f(i+1)−f(i−1))
容易发现 g(L)=f(L)-f(L-1)=f(L)也就是所要求的答案
计算 g(i+1)+g(i)=f(i+1)−f(i)+f(i)−f(i−1)=f(i+1)−f(i−1)
又因为1/Pi*g(i)=f(i+1)−f(i−1) 因而有 g(i+1)=(1−Pi)/Pi*g(i)
根据 g 的定义有 L<=i<=R sigma(g(i))=f(R+1)−f(L−1)=1
我们又知道 g(i+1) 和 g(i)的比值关系,设为 ti=g(i+1)/g(i)
则有 g(L)∗(1+tL+tLtL+1+...+tL∗...∗tR)=1
计算括号内乘积就可以得到概率f(L)