zoukankan      html  css  js  c++  java
  • 【非原创】LightOJ

    学习博客:

    戳这里

    戳这里   

    戳这里

    戳这里

    题意:
    在一个三维的空间,每个点都有一盏灯,开始全是关的,
    现在每次随机选两个点,把两个点之间的全部点,开关都按一遍;问k次过后开着的灯的期望数量;

    题解:

    肯定不能从随机抽取两个数这里入手的,要求开着的灯的数量就从对每一盏灯,操作结束后灯开着的概率,然后将这些概率求和就是对于整个矩阵到最后开着的灯的数量了,这就把矩阵的问题落实到了对于求每个坐标的概率的问题。

    对每个点单独计算贡献,即k次过后每个点开关被按了奇数次的期望

    一个点如果被包到所选空间里,那么说明选的两个点,x坐标在这个点两侧,y坐标在这个点两侧,z坐标在这个点两侧;

    对于一维的,可以用1-frac{(x-1)*(x-1)+(n-x)*(n-x)}{n*n}求出两个点在x这一点两侧的概率。然后三维的只要当成三个一维的乘起来就行了。

    E=

    求法:


    这里写图片描述

     代码(亦非原创):

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int t,x,y,z,m;
     6 
     7 int main()
     8 
     9 {
    10 
    11     scanf("%d",&t);
    12 
    13     int cas=0;
    14 
    15     while(t--)
    16 
    17     {
    18 
    19         scanf("%d%d%d%d",&x,&y,&z,&m);
    20 
    21         double ans=0.0;
    22 
    23         for(int i=1;i<=x;i++)
    24 
    25         for(int j=1;j<=y;j++)
    26 
    27         for(int k=1;k<=z;k++)
    28 
    29         {
    30 
    31             double p=0.0;
    32 
    33             p= 1.0-1.0*((x-i)*(x-i)+(i-1)*(i-1))/(x*x);
    34 
    35             p*=1.0-1.0*((y-j)*(y-j)+(j-1)*(j-1))/(y*y);
    36 
    37             p*=1.0-1.0*((z-k)*(z-k)+(k-1)*(k-1))/(z*z);
    38 
    39  
    40 
    41             ans+=0.5-0.5*pow(1.0-2*p,1.0*m);
    42 
    43         }
    44 
    45         printf("Case %d: %.11lf
    ",++cas,ans);
    46 
    47     }
    48 
    49     return 0;
    50 
    51 }
    View Code
  • 相关阅读:
    CF1280G Kirchhoff's Current Loss【表达式解析,不等式】
    [AGC040C] Neither AB nor BA
    [AGC040B]Two Contests
    [ARC101E]Ribbons on Tree(容斥,dp)
    [GXOI/GZOI2019]旧词
    [SDOI2015]寻宝游戏
    半平面交初步
    [CF585E]Marbles
    [P5348]密码解锁
    NOIP2018 保卫王国
  • 原文地址:https://www.cnblogs.com/zmin/p/9760836.html
Copyright © 2011-2022 走看看