lightoj1284
题意:初始灯都暗,随机翻转(1,1,1)到(x,y,z)之间的灯k次,求最后亮着灯的数量的期望。
题解
- 我们可以求出每一次每个点被选中的概率,再求出这个点被点亮的概率。最后求和便是期望。
- 假设一维情况,区间为[0,x],则一个点k被选中的概率为。三维就是分别计算x,y,z的乘积。
- 求这个点被点亮的概率,就是被翻转奇数次并且选中它的概率。即……、
- 这个化简为
代码
#include <bits/stdc++.h>
using namespace std;
int x,y,z;
int K;
double cal(int i,int x){
return 1 - 1.0*((i - 1) * (i - 1) + (x - i) * (x - i)) / (x * x);
}
int main(){
int T,caser = 0;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&x,&y,&z,&K);
double ans = 0;
for(int i=1;i<=x;i++){
for(int j=1;j<=y;j++){
for(int k=1;k<=z;k++){
double tmp = cal(i,x) * cal(j,y) * cal(k,z);
ans += ((1 - pow(1-2*tmp,1.0*K)) * 0.5);
}
}
}
printf("Case %d: %.6lf\n",++caser,ans);
}
return 0;
}