题目链接:
J - Joyful
题目大意:给你一个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 }
原文地址:https://www.cnblogs.com/letlifestop/p/10792650.html
时间: 2024-12-19 02:08:28