zoukankan      html  css  js  c++  java
  • HDU 5245 Joyful(期望)

     http://acm.hdu.edu.cn/showproblem.php?pid=5245

    题意:

    给出一个n*m的矩阵格子,现在有k次操作,每次操作随机选择两个格子作为矩形的对角,然后将这范围内的格子填色,现在要求经过k次操作后填色格子的期望值。

    思路:

    给个格子都是独立的,所以只需要计算出每个格子经过k次操作后被填色的概率即可,最后所有格子相加就是期望值。但是直接求填色概率不好求,求不被填色概率会比较容易。假设一次操作的不被填色概率为p,那么k次之后的概率为p^k,最后该格子填色概率就是1-p^k。

    如图所示,假设我们现在要求(i,j)这个格子的不被填色概率,那么我们可以选择的两个格子可以是上部,左部,右部和下部,但是这样的话对角的四个矩形区域重复计算了一次,所以需要减去。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 typedef long long ll;
     7 int m,n,k;
     8 
     9 int main()
    10 {
    11     //freopen("in.txt","r",stdin);
    12     int T;
    13     scanf("%d",&T);
    14     int cas = 1;
    15     while(T--)
    16     {
    17         scanf("%d%d%d",&n,&m,&k);
    18         double ans = 0;
    19         double sum = (ll)m*n*m*n;
    20         for(ll i=1;i<=n;i++)
    21         {
    22             for(ll j=1;j<=m;j++)
    23             {
    24                 ll num = 0;
    25                 num += (i-1)*m*(i-1)*m;  //
    26                 num += (n-i)*m*(n-i)*m;  //
    27                 num += (j-1)*n*(j-1)*n;  //
    28                 num += (m-j)*n*(m-j)*n;  //
    29                 num -= (i-1)*(j-1)*(i-1)*(j-1);
    30                 num -= (i-1)*(m-j)*(i-1)*(m-j);
    31                 num -= (n-i)*(j-1)*(n-i)*(j-1);
    32                 num -= (n-i)*(m-j)*(n-i)*(m-j);
    33                 ans += 1 - pow(num/sum, k);
    34             }
    35         }
    36         int a = round(ans);
    37         printf("Case #%d: %d
    ",cas++, a);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    抽象工厂与工厂方法的区别
    工作那些年的事兒
    抽象工廠與工廠方法的區別
    Dot Net设计模式—MVC模式
    Log4Net配置
    FileStream的使用
    asp.net用户检测的两种方式
    SWFUpload无刷新文件批量上传
    页面生命周期
    Lambda表达式与匿名方法
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/9256226.html
Copyright © 2011-2022 走看看