https://vjudge.net/problem/FZU-2257
题意:略
思路:
看题解补的题。正难则反的思想求概率。
首先,由于各维数之间是独立的。所以以x为例。首先,计算可以取到(i,j)的概率,取不到i的概率是同时取i的上面或者下面即((i-1) * (i-1) + (n-i)*(n-i)) /(n*n);那么可以取到i的概率就是1.0 - ((i-1) * (i-1) + (n-i)*(n-i)) /(n*n);y同理。
之后p(i,j)计算出来之后,那么1.0 - p(i,j)就是取不到这个点的概率,那么k次取不到这个点的概率就是pow(1.0 - p(i,j),k),那么1.0 - pow(1.0 - p(i,j),k)就是取k次能够取到这个点的期望啦,把每个格子的期望加起来就可以了。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 double f(int x,int n) 6 { 7 double cant = 1.0 * (1.0 * (x-1) * (x - 1) + 1.0 * (n-x) * (n-x)) / (1.0 * n * n); 8 9 return 1.0 - cant; 10 } 11 12 int main() 13 { 14 int k,m,n; 15 16 while (scanf("%d%d%d",&k,&n,&m) != EOF) 17 { 18 double ans = 0; 19 for (int i = 1;i <= n;i++) 20 for (int j = 1;j <= m;j++) 21 { 22 double tmp = f(i,n) * f(j,m); 23 24 ans = ans + 1.0 - pow(1.0-tmp,k); 25 } 26 27 printf("%.0f ",ans); 28 } 29 30 return 0; 31 }