• 昆明2022ICPCC题


    昆明2022ICPC-C题

    题目

    https://ac.nowcoder.com/acm/contest/32708/C

    考虑期望,

    \[\begin{align*} Ans=&P(n=1)\times 1+P(n=2)\times 2+P(n=3)\times 3+\cdots\\ =&(P(n\geq1)-P(n\geq2))\times 1+(P(n\geq2)-P(n\geq3))\times 2+(P(n\geq3)-P(n\geq4))\times 3+\cdots\\ =&P(n\geq1)+P(n\geq2)+P(n\geq3)+\cdots\\ \end{align*} \]

    考虑\(P(n\geq k)\),

    \[P(n\geq k)=\frac{\{(x_0,x_1,\cdots,x_{k-1})\in \R^k|\sum_{i=0}^{k-1}x_i< 1,\forall i,0\leq x_i\leq x \}} {\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\forall i,0\leq x_i\leq x \}} \]

    这样就转变成了上下两个点集的体积比。

    考虑分母

    //已知结论,n-标准单纯形与原点围成的体积是\(\frac{1}{n!}\),也就是说

    \[V(\{(x_0,x_1,\cdots,x_{k-1})\in \R^k|\forall i,0\leq x_i\leq x \})=x^k \]

    考虑\(x\geq 1\),

    \[\begin{align*} 分子=&\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\sum_{i=0}^{k-1}x_i < 1,\forall i,0\leq x_i\leq x \}\\ =&\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\sum_{i=0}^{k-1}x_i < 1 \}\quad(因为x\leq 1\leq x)\\ =&\{(s_0,s_1,\cdots,s_{k-1})\in R^k|0\leq s_0 \leq s_1 \leq \cdots\leq s_{k-1} < 1\}\\ \end{align*} \]

    相当于在长度为1的线段上随机取k个不同的点(因为实数轴上随机取有限个点,能取到两个点完全一样的概率为0,于是不考虑这种情况),若这k个点正好递增则满足条件,概率为\(\frac{1}{k!}\)(因为有\(k!\)种排列方式)

    所以

    \[\begin{align*} 分子=&\frac{1}{k!}\\ P(n\geq k)=&\frac{1}{k!}\times \frac{1}{x^k}\\ Ans=&\sum_{k=1}^{\infin} \frac{1}{k!}\times \frac{1}{x^k}=e^{\frac{1}{x}} \end{align*} \]

    考虑分子

    \[\begin{align*} 分子=&\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\sum_{i=0}^{k-1}x_i < 1,\forall i,0\leq x_i\leq x \}\\ \end{align*} \]

    思及容斥,

    image-20220421130244469

    可将分子变形为

    \[\begin{align*} 分子=&\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\sum_{i=0}^{k-1}x_i < 1\} -\sum_{j=0}^{k-1}\{(x_0,x_1,\cdots,x_{k-1})\in \R^k|\sum_{i=0}^{k-1}x_i < 1,x_j>x\}\\ =&\{(x_0,x_1,\cdots,x_{k-1})\in R^k|\sum_{i=0}^{k-1}x_i < 1\}\\ &-\sum_{j=1}^{k}(-1)^jC_{k}^{j}\times \{(x_0,x_1,\cdots,x_{k-1})\in \R^k|\sum_{i=0}^{k-1}x_i < 1,只考虑给定的j个位置,这里的x_i>x,这里以前j项>x为例\}\\ =&1-\sum_{j=1}^{k}(-1)^jC_{k}^{j}\frac{1}{k!}(1-jx)^k \end{align*} \]

    注意,以上所有枚举的\(j\)满足\(1-jx>0\)

    相当于,在长度为\(1-jx\) 的线段上跟上面一样先用前n项和随机取点然后差分得到\((x_0,x_1,\cdots,x_{k-1})\)

    然后分子也可以把1合并进去

    \[\begin{align*} 分子=&\sum_{j=0}^{k}(-1)^jC_{k}^{j}\frac{1}{k!}(1-jx)^k \end{align*} \]

    那么,

    \[\begin{align*} P(n\geq k)=&\sum_{j=0}^{k}(-1)^jC_{k}^{j}\frac{1}{k!}(1-jx)^k\times \frac{1}{x^k}\\ =&\sum_{j=0}^{k}(-1)^j\frac{1}{(k-j)!j!}(\frac{1-jx}{x})^k\\ Ans=&\sum_{k=1}^{\infin}\sum_{j=0}^{k}(-1)^j\frac{1}{(k-j)!j!}(\frac{1-jx}{x})^k\\ =&\sum_{1-jx\geq 0}\sum_{k=j}^{\infin} \frac{(-1)^j}{j!}\frac{(\frac{1-jx}{x})^k}{(k-j)!}\\ =&\sum_{1-jx\geq 0}\frac{(-1)^j}{j!}\sum_{k=j}^{\infin}\frac{(\frac{1-jx}{x})^{k-i}}{(k-j)!}(\frac{1-jx}{x})^{j}\\ =&\sum_{1-jx\geq 0}\frac{(-1)^j}{j!}\sum_{k=j}^{\infin}\frac{(\frac{1-jx}{x})^{k-j}}{(k-j)!}(\frac{1-jx}{x})^{j}\\ =&\sum_{1-jx\geq 0}\frac{(-1)^j}{j!}e^{\frac{1-jx}{x}}(\frac{1-jx}{x})^{j}\\ \end{align*} \]

    带入当\(x\geq 1\)的情况,会发现也成立。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main(){
            int T;double x;
            scanf("%d",&T);
            while(T--){
                scanf("%lf",&x);
                double ans=0,p=1;
                int k=1;
                for(int i=0;1-i*x>=0;i++){
                    ans+=p*k*pow((1-i*x)/x,i)*exp((1.0-i*x)/x);
                    k*=-1;p/=(i+1);
                }
                printf("%.15f\n",ans);
            }
    }
    

    参考链接

    https://www.zhihu.com/question/528099946

    参考CHSWang 的答案,补了一些细节。

    https://zhuanlan.zhihu.com/p/442216331

    谢谢教我配PicGo图床,谢谢

    评价

    真优美,猫猫发出“啧”的声音。

  • 相关阅读:
    ASP.Net 显示
    ASP.Net EF框架
    ASP.Net redis存取方法
    ASP.Net 红包
    winform 代码生成textbox ,checkbox
    c# winform 窗体 对话框绑定的值如何填到主窗体问题
    c# / .net wFramework winform 之运行后的窗体窗口可拖动操作
    托管调试助手 "DisconnectedContext":“针对此 RuntimeCallableWrapper 向 COM 上下文 0xd47808 的转换失败,错误如下: 系统调用失败。
    使用C#语言,如何实现EPLAN二次开发 Api插件及菜单展示
    winform 学习之qq邮箱正则验证及常用正则
  • 原文地址:https://www.cnblogs.com/zx0710/p/16176805.html
Copyright © 2020-2023  润新知