zoukankan      html  css  js  c++  java
  • J

    J - Joyful

     

    题意:给你一个n*m的矩形,每次你可以其中挑选任意两个点作为一个矩形的对角,然后将矩形区域染色,现在告诉你要操作k次,求矩形中有多少个小方格被染色的期望值。

    做法:线性期望?E(X+Y)=E(X)+E(Y),我们将问题转化为每个小方格被染色的期望值,然后累加就是总的期望值,对于求每个小方格被染色的期望值我们可以求它被染色的概率p,反向求它不被染色的概率会很容易,可知对于一个小方格总次数是m*m*n*n,不被染色的区域就是两个点都在小方格的上,下,左,右,然后对于四个角会多算一次,最后减一下。

    注意事项!!!!:在写代码时,要时刻注意对于int计算时,避免溢出要先强转(long long),时刻注意int计算结果转化double时要在计算前加1.0*或1.0+使它先变成浮点数在运算。

    #include<bits/stdc++.h>
    using namespace std;
    #define LL long long
    int main()
    {
        int t,n,m,k;
        scanf("%d",&t);
        for(int it=1; it<=t; it++)
        {
            scanf("%d%d%d",&n,&m,&k);
            LL sum=(LL)n*n*m*m;
            double ans=0;
            LL cnt=0;
            for(int i=1; i<=n; i++)
                for(int j=1; j<=m; j++)
                {
                    cnt=0;
                    cnt+=(LL)(i-1)*(i-1)*m*m;
                    cnt+=(LL)(n-i)*(n-i)*m*m;
                    cnt+=(LL)(j-1)*(j-1)*n*n;
                    cnt+=(LL)(m-j)*(m-j)*n*n;
                    cnt-=(LL)(i-1)*(i-1)*(j-1)*(j-1);
                    cnt-=(LL)(i-1)*(i-1)*(m-j)*(m-j);
                    cnt-=(LL)(n-i)*(n-i)*(j-1)*(j-1);
                    cnt-=(LL)(n-i)*(n-i)*(m-j)*(m-j);
                    double temp=1.0*cnt/sum;
                    ans+=1.0-pow(temp,k);
                }
    //        printf("%lf
    ",ans);
            printf("Case #%d: %d
    ",it,(int)(ans+0.5));
        }
    
    }
  • 相关阅读:
    关于字符串转义的代码
    JAVA发布aar文件
    apache虚拟主机配置HTTPS
    font-face跨域办法
    Javascript数组方法(译)
    Python动态生成变量
    给AOP的after函数使用原函数局部变量
    stopImmediatePropagation的应用
    IE9或以上的浏览器flash值为空时,导致domready不触发
    html写法对gzip压缩率的影响
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/10811768.html
Copyright © 2011-2022 走看看