AcWing,第114场周赛-5058双色球

5058.双色球

约翰和贝茜玩抽球游戏。

一个盒子中有 n个白球和 m个黑球。

双方轮流行动,由约翰先行。

每当轮到一方行动时,其从盒中随机抽出一个球,盒子中的每个球被抽出的概率相同。

率先抽出白球的一方获胜。

此外,由于贝茜的手比较笨拙,所以每当她抽出一个球后,盒子都会剧烈摇晃,随后就会有恰好一个球掉出盒子(如果盒中有球的话),盒子中的每个球掉出的概率相同。

掉出的球无论是什么颜色,都予以作废。

当盒子中没有球时,如果仍未分出胜负,则判定为贝茜获胜。

请你计算,约翰获胜的概率。

输入格式

一行,两个整数 n,m。

输出格式

一个实数,表示约翰获胜的概率。

输出结果与正确答案的绝对误差不超过 1e−9,则视为正确。

数据范围

前 4个测试点满足 0≤n,m≤100。

所有测试点满足 0≤n,m≤1000。

输入:

1 3

输出:

0.500000000

输入样例2:

5 5

输出样例2:

0.658730159

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
double f[N][N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
double p1 = 0,p2 = 0,p3 = 0;
p1= i*1.0 / (i+j);
double p4 = j*1.0/(i+j)*(j-1)/(i+j-1);
if(j>=2)
p2 = p4*i*1.0/(i+j-2)*f[i-1][j-2];
if(j>=3)
p3=p4*(j-2.0)/(i+j-2)*f[i][j-3];
f[i][j]=p1+p2+p3;
}
}
printf("%.10lf\n",f[n][m]);
return 0;
}
posted @   liuwansi  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示