• [10.08模拟赛] 龙妹妹喝牛奶 (期望)


    [模拟赛] 龙妹妹喝牛奶 (期望)

    题目描述

    As we know ,龙妹妹非常喜欢喝牛奶。
    As we know ,龙妹妹需要减肥。
    As we all know, 龙妹妹是代码狂魔。
    当龙妹妹对着一堆牛奶想着减肥的时候,他想起了ufo对他的教诲:”犹豫不决吗?那就写一个rand()吧。”¥……&**…#@!
    于是,龙妹妹把他的牛奶排成了一个N*M的矩阵,每当他要喝牛奶时,他就运行以下代码。((random(x))为等概率生成任意[1,x]中的任意一个正整数)
    (x1=random(N);)
    (y1=random(M);)
    (x2=random(N);)
    (y2=random(M);)
    然后将以(x1,y1),(x2,y2)为两个顶点的,四条边平行于边界的一个子矩形内的牛奶全部喝掉,再把空盒放回原处(显然,如果某个格子上的牛奶已经被喝掉了,那她就只能拿到一个空盒)
    在这题中,我们假定random()函数非常完美,得到每个格子的概率相等。
    请你帮龙妹妹算一算,K次之内她期望可以喝到多少牛奶?

    输入

    一行内包含3个正整数K,N,M。

    输出

    一个整数,K次之内她期望可以喝到牛奶的盒数(四舍五入精确到整数)。

    样例输入

    1 3 3

    样例输出

    4

    提示

    【数据范围】
    0<=K<=10000 1<=N<=1000 1<=M<=1000
    测试点 特点
    (0、1 0<=K<=10 N=1)(M=1)
    (2、3 K=1)
    (4、5 0<=K<=2,N<=5,M<=5)
    (6、7 0<=K<=10)
    (8、9)
    【样例解释】
    对于样例输入,简单的解释是这样的:在(3 imes 3)的格子里取子矩形,取到(1 imes 1)的方案数为9,取到(1 imes 2)(2 imes 1)的方案数为24,取到(1 imes 3)(3 imes 1)的方案数 为12,取到(2 imes 2)的方案数为16,取到(2 imes 3)(3 imes 2)的方案数为16,取到(3 imes 3)的方案数为4结果约为 ((1 imes 9+2 imes 24+3 imes 12+4 imes 16+6 imes 16+9 imes 4)/(9 imes 9)=3.5679),四舍五入后得4。

    Solution

    60分:按照题目描述随机,(反正我是没有60)
    100分:
    记住一句话

    期望的和=和的期望

    题目要求我们计算所有格子牛奶的期望,我们可以转化思路,对于每个格子分别处理,最后求和

    思考这样一个问题:一个人有一把枪,每次击中目标的几率为(50\%),问至少多少次开枪后目标被击中的概率至少为(90\%)?

    我们假设k次后概率至少为(90\%),其实在这期间只要打中一枪,概率就会为(90\%)以上,也可能打中多次,并不好统计答案,怎么办?

    问题可以转化为求多少次之后目标没有被打中的概率降到(10\%)及以下

    这要求我们前k次都不能打中,这只有一种情况,比之前好算的多
    ((frac{1}{2})^k<=frac{1}{10}),解得k=4

    这启发我们当直接计算状态过多时,我们可以考虑间接求出答案

    本题就是如此...

    首先,总矩形数为(n^2 imes m^2)(因为x1,y1,x2,y2并没有大小要求,横坐标的取值范围都是[1,n],纵坐标都是[1,m])

    对于一个点,我们求出它在k次之后依然没有被选的概率,即1.0-选的概率

    由于行,列互不影响,我们可以单独考虑最后相乘

    单独考虑行的情况,假设我们在一行的第x列,我们有两种情况覆盖这个点即选中[1,x]和选中[x,n]所以我们的方案数就是(x imes (n-x+1))
    列的情况同理处理,然后相乘

    又因为坐标是可以交换确定矩形的,所以还要乘一个2,我们发现这会多算一遍x=n-x+1的情况,所以还要-1

    最后方案数就是((2 imes x imes (n-x+1)-1) imes (2 imes y imes (m-y+1)-1))

    除以矩形的个数就是期望了,这个矩形个数并不是真正的矩形个数
    假设我们通过左上角(x1,y1)和右下角(x2,y2)来确定矩形,这要求(x1<=x2,y1<=y2),而题目描述所选的坐标并不满足这个要求,每个取值都是[1,n]或者[1,m],所以就是上述讲的(n^2 imes m^2)

    Code

    #include<bits/stdc++.h>
    #define rg register
    #define il inline
    #define Min(a,b) (a)<(b)?(a):(b)
    #define Max(a,b) (a)>(b)?(a):(b)
    #define lol long long
    #define in(i) (i=read())
    using namespace std;
    const int N=1010;
    lol read() {
    	lol ans=0,f=1; char i=getchar();
    	while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
    	while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0',i=getchar();
    	return ans*=f;
    }
    
    lol n,m,k;
    double AQ,base,ans;
    int main()
    {
        //freopen("milk.in","r",stdin);
        //freopen("milk.out","w",stdout);
        in(k),in(n),in(m); base=1.0/n/n/m/m;
        if(!k) puts("0"),exit(0);
        for(lol i=1;i<=n;i++) {
            AQ=(2*(n-i+1)*i-1)*base;
            for(lol j=1;j<=m;j++) {
                double res=1.0,p=1.0-AQ*(2*(m-j+1)*j-1);
                int x=k;
                while(x) {
                    if(x&1) res*=p;
                    x>>=1,p*=p;
                }ans+=1.0-res;
            }
        }
        cout<<(lol)(ans+0.5)<<endl;//四舍五入
    }
    

    博主蒟蒻,随意转载.但必须附上原文链接

    http://www.cnblogs.com/real-l/

  • 相关阅读:
    Java文件流应用:复制文件
    Java IO流之文件流
    初识Java-IO流
    Java集合之Properties
    Java之FilenameFilter接口
    Java之File类
    Java内部类
    Java常用类之要点总结
    Java异常类(Throwable)
    php分布式缓存系统 Memcached 入门
  • 原文地址:https://www.cnblogs.com/real-l/p/9756006.html
Copyright © 2020-2023  润新知