• HDU


    JoyfulHDU - 5245

      题目大意:有N*M个正方形,进行k次涂色,每次会随机的选两个正方形作为一个矩形区域的顶点,然后把这个区域内的涂色,最后问k次之后,预计被涂了色的正方形有几个(也就是数学期望),转化成整数输出。

      数学期望的定义是一切可能的取值xi与对应的概率Pi(=xi)之积的和,所以就想到了求出每个正方形被涂色的概率,然后一个正方形的权值就是1,所以把每个正方形的被涂色的概率加起来就是答案。因为是进行k次涂色,那么k中至少有一次被涂到的概率就是1-k次都涂不到的概率。

      至于怎么算它不被涂到的概率呢?首先因为作为顶点的两个正方形是选择是互不影响的,每个都有n*m种选择,所以总的方案就是n*m*n*m。然后不把当前正方形包含在矩形内的方案有多少,可以画图理解。

      

      红色正方形就是我们目前要求的正方形,因为不能把它包含在内,那么两个正方形的选择应该在同一侧,就像上图的蓝色部分,然后在同一侧的两个正方形的选择是互不影响的,也就是所有正方形个数的平方。而蓝色部分重叠了绿色部分,所以绿色部分得去掉。

     1 #include<cstdio>
     2 #define pf(x) (x*x)
     3 typedef long long ll;
     4 int main()
     5 {
     6     int t=1,T,n,m,k;
     7     scanf("%d",&T);
     8     while(t<=T)
     9     {
    10         scanf("%d%d%d",&n,&m,&k);
    11         ll sum=1ll*pf(n)*pf(m);
    12         double ans=0.0;
    13         for(int i=1;i<=n;i++)
    14             for(int j=1;j<=m;j++)
    15             {
    16                 ll num=0;
    17                 num+=pf(1ll*n*(j-1))+pf(1ll*n*(m-j));//左右两侧的方案 
    18                 num+=pf(1ll*m*(i-1))+pf(1ll*m*(n-i));//上下两侧的方案 
    19                 num-=pf(1ll*(i-1)*(j-1))+pf(1ll*(i-1)*(m-j));//上侧两角的方案 
    20                 num-=pf(1ll*(n-i)*(j-1))+pf(1ll*(n-i)*(m-j));//下侧两角的方案 
    21                 double no=1.0*num/sum,kno=1.0;
    22                 for(int kk=0;kk<k;kk++)
    23                     kno*=no;
    24                 ans+=1.0-kno;
    25             }
    26         printf("Case #%d: %.0f
    ",t++,ans);
    27     }
    28     return 0;
    29 } 
    我不是一个粉刷匠
  • 相关阅读:
    springcloud将多个微服务的swagger文档整合到同一个地址访问
    git 强制回滚到某个commit版本
    常用几个 mvn 命令
    @Resource @Autowired
    我们需要深度沟通
    python 中文乱码解决方案
    同一台电脑使用多个ssh私钥配置不同的github账号
    pyinstaller 打包 sentry_sdk 出现 ModuleNotFoundError 的解决方法
    Linux系统下强制踢掉登录用户
    zsh Ctrl+U 从当前位置删除到行首
  • 原文地址:https://www.cnblogs.com/LMCC1108/p/10761624.html
Copyright © 2020-2023  润新知