zoukankan      html  css  js  c++  java
  • [CF248E]Piglet's Birthday

    https://zybuluo.com/ysner/note/1236827

    题面

    给定 (n) 个货架,初始时每个上面有 (a_i) 个蜜罐。
    (q) 次操作,每次操作形如 (u,v,k) ,表示从货架 (u) 上任意选择 (k) 个蜜罐试吃(吃过的也还能吃),吃完后把这 (k) 个蜜罐放到 (v) 货架上去。
    每次操作完之后回答所有蜜罐都被试吃过的货架数量的期望。

    • (n,qleq10^5,a_ileq100,kleq5)

    解析

    又一次看到期望题就boom 0
    状态不难,设(f[i][j])表示第(i)个书架,有(j)个没被吃过的罐的期望。(其实也是概率)。
    枚举货架上原有罐没被吃过的个数(i)(k)个罐中没被吃过的个数(j)
    原有(DP)值乘上情况如此的方案数(分吃过的罐和没吃过的罐)(C_{i+j}^{j}*C_{b[u]-i-j}^{k-j}),再除以总方案数(C_{b[u]}^k),即得概率。
    乘上所得结果?不存在的。于是这个概率就成了期望。

    注意公式$$C_n^m=sum_{i=1}^mfrac{n-i+1}{i}$$

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #define re register
    #define il inline
    #define ll long long
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    #define fp(i,a,b) for(re int i=a;i<=b;i++)
    #define fq(i,a,b) for(re int i=a;i>=b;i--)
    using namespace std;
    const int mod=1e9+7,N=1e5+100;
    int n,m,a[N],b[N],Q;
    double dp[N][115],ans;
    il ll gi()
    {
       re ll x=0,t=1;
       re char ch=getchar();
       while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
       if(ch=='-') t=-1,ch=getchar();
       while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
       return x*t;
    }
    il double C(re int x,re int y)
    {
      if(x<y) return 0;
      double res=1;
      fp(i,1,y) res=res*(x-i+1)/i;
      return res;
    }
    int main()
    {
      n=gi();fp(i,1,n) a[i]=b[i]=gi(),dp[i][a[i]]=1,ans+=dp[i][0];
      Q=gi();
      while(Q--)
        {
          re int u=gi(),v=gi(),k=gi();ans-=dp[u][0];
          fp(i,0,a[u])
        {
          double tmp=0,t=C(b[u],k);
          fp(j,0,k) //printf("%lf %lf %lf %lf
    ",dp[u][i+j],C(i+j,j),C(b[u]-i-j,k-j),t)
            tmp+=dp[u][i+j]*C(i+j,j)*C(b[u]-i-j,k-j)/t;
          dp[u][i]=tmp;
        }
          b[u]-=k;b[v]+=k;ans+=dp[u][0];printf("%.10f
    ",ans);
        }
      return 0;
    }
    
  • 相关阅读:
    Dijkstra单源最短路模板
    Naming Company CodeForces
    Naming Company CodeForces
    CF
    CF
    Present CodeForces
    9绑定方法与非绑定方法
    pycharm设置连接
    8封装的意义和拓展性
    property特性
  • 原文地址:https://www.cnblogs.com/yanshannan/p/9411044.html
Copyright © 2011-2022 走看看