题目链接
题目大意(英语阅读理解)
有 A 、 B A、B A、B 两人一起逐个挖 n ( 1 ≤ n < 998244353 ) n(1 \leq n <998244353) n(1≤n<998244353)块矿,对于同一块矿,有 a a a 的概率属于 A A A ,有 b b b 的概率属于 B B B ,其中 a , b a,b a,b为两方当时的股权占比, a + b = 1 a+b=1 a+b=1。某方拥有一块矿后,其股权增加 w w w。初始 A A A 拥有 x y \frac{x}{y} yx 的股权, B B B 拥有 1 − x y 1-\frac{x}{y} 1−yx 的股权。求 A A A 能获得矿的期望数。
题解
设
S
i
S_i
Si表示第
i
i
i块矿挖出后的股权。
由题意得,每获得一块后增加的期望为
w
∗
S
i
−
1
1
+
w
(
i
−
1
)
\frac{w*S_{i-1}}{1+w(i-1)}
1+w(i−1)w∗Si−1
可得递推式
S
i
=
S
i
−
1
+
w
∗
S
i
−
1
1
+
w
(
i
−
1
)
S_i=S_{i-1}+\frac{w*S_{i-1}}{1+w(i-1)}
Si=Si−1+1+w(i−1)w∗Si−1
但由于
n
n
n 的值很大,故无法递推计算,我们考虑一下它的通项式。
可以转化为乘法,即
S
i
=
S
i
−
1
∗
1
+
w
∗
i
1
+
w
(
i
−
1
)
\begin{aligned} S_i=S_{i-1}*\frac{1+w*i}{1+w(i-1)} \end{aligned}
Si=Si−1∗1+w(i−1)1+w∗i
将其展开为
S
i
=
1
+
w
∗
i
1
+
w
(
i
−
1
)
∗
1
+
w
∗
(
i
−
1
)
1
+
w
(
i
−
2
)
∗
.
.
.
∗
1
+
w
∗
1
1
+
w
∗
0
S_i=\frac{1+w*i}{1+w(i-1)}*\frac{1+w*(i-1)}{1+w(i-2)}*...*\frac{1+w*1}{1+w*0}
Si=1+w(i−1)1+w∗i∗1+w(i−2)1+w∗(i−1)∗...∗1+w∗01+w∗1
将其化简为
a
(
1
+
w
∗
i
)
a(1+w*i)
a(1+w∗i)
而
S
i
−
a
w
=
a
∗
i
\frac{S_i-a}{w}=a*i
wSi−a=a∗i
所以答案为
n
∗
a
=
n
x
y
n*a=n\frac{x}{y}
n∗a=nyx
用逆元计算即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int pow(int a,int b)
{
int ret=1;
while(b)
{
if(b&1)
ret=1ll*ret*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return ret;
}
int main()
{
int n,w,x,y;
scanf("%d %d %d %d",&n,&w,&x,&y);
printf("%d\n",1ll*n*x%mod*pow(y,mod-2)%mod);
}