hdu4465 Candy(快速排列组合+概率)

探讨了一个懒孩子随机从两个初始糖果数量相同的盒子中取糖的概率问题,并通过计算期望值来预测剩余糖果的数量。

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4465

Candy

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2524    Accepted Submission(s): 1103
Special Judge


Problem Description
LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large candy boxes, each contains n candies initially. Everyday he chooses one box and open it. He chooses the first box with probability p and the second box with probability (1 - p). For the chosen box, if there are still candies in it, he eats one of them; otherwise, he will be sad and then open the other box.
He has been eating one candy a day for several days. But one day, when opening a box, he finds no candy left. Before opening the other box, he wants to know the expected number of candies left in the other box. Can you help him?
 

Input
There are several test cases.
For each test case, there is a single line containing an integer n (1 ≤ n ≤ 2 × 105) and a real number p (0 ≤ p ≤ 1, with 6 digits after the decimal).
Input is terminated by EOF.
 

Output
For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) and Y is a real number indicating the desired answer.
Any answer with an absolute error less than or equal to 10-4 would be accepted.
 

Sample Input
  
10 0.400000 100 0.500000 124 0.432650 325 0.325100 532 0.487520 2276 0.720000
 

Sample Output
  
Case 1: 3.528175 Case 2: 10.326044 Case 3: 28.861945 Case 4: 167.965476 Case 5: 32.601816 Case 6: 1390.500000
 

Source
2012 Asia Chengdu Regional Contest


题意:有两个盒子各有n个糖,每天随机选一个(概率分别为p,1-p),然后吃一颗糖。直到有一天,打开一个盒子看没糖l!输入n,p,求此时另一个盒子里糖的个数数学期望。

分析:根据期望的定义,不妨设最后打开第一个盒子,此时第二个盒子有i颗,则这之前打开过n+(n-i)次盒子,其中有n次取的是盒子1,其余n-i次取的盒子2,概率为C(2n-i,n)P^(n+1)*(1-P)^(n-i)。注意P的指数是n+1,因为除了前面打开过n次盒子1之外,最后又打开了一次。
          当然光计算出这个概率,这题还是很难实现的,我们需要优化一下。我们可以利用对数,设v1(i)=ln(C(2n-i,n))+(n+1)ln(P)+(n-i)ln(1-P),则“最后打开第一个盒子”对应的数学期望为 i*e^v1(i)。
         同理,当最后打开的是第二个盒子,对数为 v2(i)=ln(C(2n-i,n))+(n+1)ln(1-p)+(n-i)ln(p),对应的数学期望为 i*e^v2(i)。
        根据数学期望的定义,最终答案为 sum{i*(e^v1(i)+e^v2(i))。                                    (参考算法竞赛入门经典333页)


 
 #include<iostream>
 #include<cstdio>
 #include<cmath>
 #include<cstring>
 using namespace std;
 const int maxn=400040;
 double nlog[maxn],p,q; //nlog[n]记录log[1]+log[2]+...+log[n]
 int n;
 double cal(int n,int m)
 {
     return nlog[n]-nlog[m]-nlog[n-m];
 }
 int main()
 {
     int cas=0;
     memset(nlog,0,sizeof(nlog));
     for(int i=1;i<maxn;i++) // 对nlog[n]做预处理
        nlog[i] +=nlog[i-1] + log(i);
     while(scanf("%d %lf",&n,&p) != EOF)
     {
         q=log(1-p); // 直接对(1-p)取对数,后面运用到
         p=log(p);
         double ans=0;
         for(int i=0;i<=n;i++)
         {
             ans+=i*(exp(cal(2*n-i,n)+(n+1)*p+(n-i)*q) + exp(cal(2*n-i,n)+(n+1)*q+(n-i)*p));
         }
         printf("Case %d: %lf\n",++cas,ans);
     }
     return 0;
 }

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值