J - Joyful HDU - 5245 (概率)

题目链接:

J - Joyful

 HDU - 5245 

题目大意:给你一个n*m的矩阵,然后你有k次涂色机会,然后每一次可以选定当前矩阵的一个子矩阵染色,问你这k次用完之后颜色个数的期望。

具体思路:颜色个数的期望等于每一个方块单独的期望加起来,就是总的期望。

对于当前的方块的期望,我们先计算这个方块不会出现的概率,就是当前的(x,y),先计算出当前的两个点在他周围四整块的出现的概率,但是这样四个角会重复计算,再去掉就好了。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 const int maxn = 2e5+100;
 5 int main()
 6 {
 7     int T;
 8     int Case=0;
 9     scanf("%d",&T);
10     while(T--)
11     {
12         ll n,m,k;
13         scanf("%lld %lld %lld",&n,&m,&k);
14         double sum=0;
15         for(ll   i=1; i<=n; i++)
16         {
17             for(ll   j=1; j<=m; j++)
18             {
19                 ll tmp=0;
20                 tmp+=(ll)(i-1ll)*m*(i-1ll)*m;
21                 tmp+=(ll)(j-1ll)*n*(j-1ll)*n;
22                 tmp+=(ll)(n-i)*m*(n-i)*m;
23                 tmp+=(ll)(m-j)*n*(m-j)*n;
24 
25                 tmp-=(ll)(i-1ll)*(j-1ll)*(i-1ll)*(j-1ll);
26                 tmp-=(ll)(n-i)*(j-1ll)*(n-i)*(j-1ll);
27                 tmp-=(ll)(i-1ll)*(m-j)*(i-1ll)*(m-j);
28                 tmp-=(ll)(n-i)*(m-j)*(n-i)*(m-j);
29                 double ans=(tmp*1.0)/(n*n*m*m);
30                 ans=pow(ans,k);
31                 sum+=1.0-ans;
32             }
33         }
34         ll tmp=round(sum);
35         printf("Case #%d: %d\n",++Case,tmp);
36     }
37     return 0;
38 }

 

posted @ 2019-04-29 20:16  Let_Life_Stop  阅读(134)  评论(0编辑  收藏  举报