牛客等级之题 N1(8.3) 题解
等级之题 N1(8.3)
https://ac.nowcoder.com/acm/contest/6766/A
题目大意: 一开始箱子里有 个黑球 个白球,每次有 的概率放进去一个黑球,有 的概率放进去一个白球,放完球后再随机拿一个球,问进行 次后箱子里黑球期望个数。
题解
可以注意到每次操作后球数是保持在 不会变的。
令 表示进行 次操作后黑球的期望个数,显然有 。
有四种情况需要考虑,其中两种是放一个黑球拿一个黑球
和放一个白球拿一个白球
,这两种不会引起黑球数变化所以不需要考虑。
放一个黑球拿一个白球的概率为:,贡献为 ,因为多了一个黑球。
放一个白球拿一个黑球的概率为:,贡献为 ,因为少了一个黑球。
整理得到:。
令 ,那么有 ,展开得到 ,于是就可以 计算答案了。
代码如下:
#include <cstdio> #define mod 1000000007 int n,m,k,a,b; int ksm(int x,int y){int re=1;for(;(y&1?re=1ll*re*x%mod:0),y;x=1ll*x*x%mod,y>>=1);return re;} #define inv(x) ksm(x,mod-2) int main() { scanf("%d %d %d %d %d",&n,&m,&k,&a,&b); int p=1ll*a*inv(b)%mod,T=1ll*(n+m)*inv(n+m+1)%mod; printf("%d",(1ll*ksm(T,k)*n%mod+1ll*p*T%mod*(ksm(T,k)-1+mod)%mod*inv(T-1)%mod)%mod); }