记录编号 |
164121 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
BD |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
5.229 s |
提交时间 |
2015-05-28 15:21:26 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int N,M,P,K;
inline double calc_cross(int a,int i){//在1~a内随机选两个数,跨越i的概率
return (2*i*(a-i+1)-1.0)/(a*a);
}
inline double calc_p(int i,int j,int k){
return calc_cross(N,i)*calc_cross(M,j)*calc_cross(P,k);
}
inline double calc_E(double p){//每次选中它的概率为p
//这个公式是用二项式定理推的
return (1-pow(1-2*p,K+0.0))/2;
}
inline double calc(int i,int j,int k){
return calc_E(calc_p(i,j,k));
}
void work(void){
scanf("%d%d%d%d",&N,&M,&P,&K);
double ans=0;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
for(int k=1;k<=P;k++){
ans+=calc(i,j,k);
}
}
}
printf("%.6lf\n",ans);
}
int main(){
freopen("BD.in","r",stdin);
freopen("BD.out","w",stdout);
int T;
scanf("%d",&T);
while(T--) work();
return 0;
}