2021牛客暑期多校训练营#9:I-Incentive Model

2021牛客暑期多校训练营#9:I-Incentive Model

原题链接:https://ac.nowcoder.com/acm/contest/11260/I

题目大意

有A、B两人一起逐个挖 n ( 1 ≤ n < 998244353 ) n(1\leq n< 998244353) n(1n<998244353)块矿,对于同一块矿,有 a a a的概率属于A,有 b b b的概率属于B,其中 a , b a,b a,b为双方当时的股权占比, a + b = 1 a+b=1 a+b=1。某方拥有一块矿后,其股权增加 w w w。初始A拥有 x y \frac{x}{y} yx的股权,B拥有 1 − x y 1-\frac{x}{y} 1yx的股权。求A能获得矿的期望。

解题思路

一个接近 1 0 10 10^{10} 1010很明显不能用枚举法做,只能用通项式或快速幂或矩阵快速幂做,首先写出递推式:
设S_i为第i块矿挖出后A的股权,则递推式为
S i = S i − 1 + S i − 1 1 + W ( i − 1 ) W = S i − 1 1 + W i 1 + W ( i − 1 ) = 1 + W i 1 + W ( i − 1 ) × 1 + W ( i − 1 ) 1 + W ( i − 2 ) × 1 + W i − 2 1 + W ( i − 3 ) … × S 0 ( S 0 = a ) = ( 1 + W i ) a \begin{aligned} S_i&=S_{i-1}+\frac{S_{i-1}}{1+W(i-1)}W\\ &=S_{i-1}\frac{1+Wi}{1+W(i-1)}\\ &=\frac{1+Wi}{1+W(i-1)}\times\frac{1+W(i-1)}{1+W(i-2)}\times\frac{1+W{i-2}}{1+W(i-3)}\ldots \times S_0(S_0=a)\\ &=(1+Wi)a \end{aligned} Si=Si1+1+W(i1)Si1W=Si11+W(i1)1+Wi=1+W(i1)1+Wi×1+W(i2)1+W(i1)×1+W(i3)1+Wi2×S0(S0=a)=(1+Wi)a
答案就是
S i − a W = a i a n s = n a = n x y \begin{aligned} \frac{S_i-a}{W}&=ai\\ ans&=na= n\frac{x}{y}\end{aligned} WSiaans=ai=na=nyx
求出y的逆元相乘取模即可

代码实现

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=998244353;
ll n,x,w,y;
ll powmod(ll x,ll p)
{
    ll res=1;
    while(p)
    {
        p&1?res=res*x%mod:0;
        x=x*x%mod;
        p>>=1;
    }
    return res;
}
int main()
{
    cin>>n>>w>>x>>y;
    cout<<n*x%mod*powmod(y,mod-2)%mod;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值