fzu 2257 saya的小熊饼干

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 }
原文地址:https://www.cnblogs.com/kickit/p/7232461.html