• TsinsenA1489 抽奖 【期望】


    题目分析:

    问题可以转化成将m个球放进n个盒子里,每个盒子的贡献为盒子中球数的平方。

    第一问考虑增量。

    对于一个原本有$x$个球的盒子,新加一个球的贡献是$2x+1$。期望条件下仍然满足。

    第$i$个球加进第$j$个盒子的概率是$frac{a[j]}{tot}$,而第$j$个盒子球数的期望是$frac{a[j]*(i-1)}{tot}$。

    所以答案就是

    $$sum_{i=0}^{n}(1+2*i*sum_{j=1}^{m}frac{a[j]^2}{tot^2})$$

    后面的$sum$预处理出来。

    第二问考虑每个盒子没有任何一个球,那么把球放到其它盒子里,求出概率拿1减,然后加起来。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 105000;
     5 
     6 int n,m;
     7 int a[maxn],tot;
     8 
     9 double fast_pow(double now,int pw){
    10     double ans = 1,dt = now;int bit = 1;
    11     while(bit <= pw){
    12     if(bit & pw){ans = ans*dt;}
    13     dt = dt*dt; bit<<=1;
    14     }
    15     return ans;
    16 }
    17 
    18 void solve1(){
    19     double um = 0;
    20     for(int i=1;i<=n;i++){
    21     double now = (double)a[i]/(double)tot;
    22     um += now*now;
    23     }
    24     double ans = 0;
    25     for(int i=0;i<m;i++){ans += (1+2*i*um);}
    26     printf("%.2lf
    ",ans);
    27 }
    28 
    29 void solve2(){
    30     double ans = 0;
    31     for(int i=1;i<=n;i++){
    32         double p = (double)(tot-a[i])/(double)tot;
    33     p = fast_pow(p,m);
    34     p = 1-p;
    35     ans += p;
    36     }
    37     printf("%.2lf
    ",ans);
    38 }
    39 
    40 int main(){
    41     scanf("%d%d",&n,&m);
    42     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    43     for(int i=1;i<=n;i++) tot += a[i];
    44     solve1();
    45     solve2();
    46     return 0;
    47 }
  • 相关阅读:
    cnetos7安装mysql并开启慢日志查询
    ansible-playbook安装zabbix_server,agent监控
    mysql性能优化之服务器参数配置-内存配置
    什么影响了mysql的性能-存储引擎层
    什么影响了mysql的性能-硬件资源及系统方面优化
    redis基本操作使用
    cmd下操作MySQL
    Win10安装MySQL
    Linux 操作
    PySpark—DataFrame笔记
  • 原文地址:https://www.cnblogs.com/Menhera/p/10404673.html
Copyright © 2020-2023  润新知