单点时限: 2.0 sec
内存限制: 256 MB
经过几年的平静,最终,ZZZ 和 MJQ 还是展开了殊死较量。
由于两个人体力都有限,他们一共可以战斗 N 回合 (N < 10),且 N 是奇数。战斗中,若其中一人赢了半数以上回合数则获得胜利,战斗立即结束。队员们必然挺自己的队长 ZZZ,但是这是一场世纪大战,谁胜谁负真不好说,队员们想知道自己队长理论获胜的概率是多少。已知 ZZZ 在单一回合中获胜的概率为 p(0< p <1),请你帮忙计算一下 ZZZ 获胜的概率是多少?
输入格式
第 1 行是一个整数 T 表示测试数据组数
接下来是 T 组测试数据,对于每组数据:
每行两个数 N,p,代表局数和 ZZZ 在一局中获胜的概率。
输出格式
输出 ZZZ 最终获胜的概率(保留小数点后 3 位)。
样例
input
2
1 0.1
3 0.1
output
0.100
0.028
/*
思路:其实就是求赢一半以上的概率
*/
#include<bits/stdc++.h>
using namespace std;
int T,n,i;
double p,rst;
int c(int n,int m)//Cnm二项试
{
int rst=1;
for(int i=1;i<=m;++i)
rst*=n+1-i,rst/=i;
return rst;
}
int main()
{
cin>>T;
while(T--){
cin>>n>>p;
rst=0;
for(i=n/2+1;i<=n;++i)
rst+=c(n,i)*pow(p,i)*pow(1-p,n-i);//p^i*(1-p)^(n-i)
printf("%.3f\n",rst);
}
return 0;
}