#18248. 聪明的质检员

聪明的质检员

题目描述 1s1s 512mb512mb

小明是一名质检员,今天要去一个工厂去检查产品质量。

这个工厂提供了nn个样品,编号为1,2,...,n1,2,...,n,其中,有一个样品是不合格产品,这个不合格产品会等概率的在这nn个样品中产生。

小明有一台检测设备,每次检测,小明可以选择一个样品,然后放入检测设备,有以下两种情况:

(1)如果小明放进去的样品刚好就是那个不合格产品,则设备会直接识别出结果,小明的任务就完成了。

(2)如果小明放进去的样品是合格品,则设备有pp的概率,正确地提示小明不合格产品的编号比这个样品大还是小,有1p1-p的概率,错误地提示小明不合格样品的编号比这个样品大还是小。

举个例子,比如现在一共有1010个样品,p=0.7p=0.7,不合格样品实际上是在33,那么,如果小明把第55个样品投入进去,则机器有0.70.7的概率提示小明不合格样品在[1,4][1,4]中,0.30.3的概率提示小明不合格样品在[6,10][6,10]中。

又比如,当前不合格样品只剩两种可能,则无论小明用哪一个样品来检测,机器都只能返回正确,或是样品在另一个里,就不存在1p1-p的概率瞎说了。

小明想找到不合格样品的编号,于是他决定,执行下述算法:

假设当前不合格样品所在区间是[l,r][l,r],首先用机器检测l+r2\lfloor \frac{l+r}{2} \rfloor这个编号的样品kk次(保证kk是奇数)。

如果这个样品恰好是不合格品,则完成任务。

否则,认可机器回答较多的那一边,然后继续执行上述算法。

举个例子,比如小明询问了样品55一共77次,机器有44次回答了左边,33次回答了右边,则小明就认为不合格品在55的左边。

现在,我们知道n,p,kn,p,k,请帮助小明算一算,他的这个算法有多少概率能找到不合格品。

输入格式

第一行输入三个数n,p,kn,p,k。其中ppdoubledouble类型的实数。

输出格式

输出一个数字表示答案。

输出一个实数表示答案,保留四位小数。

5 1.00 1
1.0000

样例解释 #1

机器不会说谎,小明自然永远不会算错。

3 0.8 1
0.8667

样例解释2

如果不合格品在22,则小明第一次就会找到不合格品。

如果不合格品在11或者33,则小明第一次询问22的时候,有0.80.8的概率被引导到正确的位置,0.20.2的概率引导到错误的位置。

总概率是$0.8\times \frac{2}{3} + 1\times \frac{1}{3}=0.866667$

10 0.8 3
0.8412

数据范围

测试点1:p=1p=1

测试点2-4:n10,p=0.8n\leq 10,p=0.8

测试点5-6:k=1k=1

测试点7-10:n1000n\leq 1000

测试点11-16:n105n\leq 10^5

测试点1-20:1n1016,1k11,0.5p11\leq n\leq 10^{16},1\leq k\leq 11,0.5\leq p\leq 1。保证kk是奇数。