吐槽:

考试的时候一直推的是f(k-1)*p,就导致gg了

分析:

假设现在已经k-1个正面向上了,

首先f(k)=f(k-1)+1+(....),表示起码从k-1转移到k还需1次

后面加的就是分别讨论两种情况

如果这次硬币正面向上,则还需要抛0次 p*0

如果这次硬币反面向上,则空亏一窥 还需要(1-p)*f(k)

则式子就是

f(k)=f(k-1)+1+p×0+f(k)×(1-p)

​ =f(k-1)+1+f(k)*(1-p)

最后化简为一个等比数列求和

注意:还要特判1这种情况

code:

#include <cstdio>
#define ri register int
typedef long long ll;
#define rll register ll
const int mod=998244353;
inline int fpow(ri a,rll b){
    ri ans=1;
    for(;b;b>>=1,a=(ll)a*a%mod)
        if(b&1) ans=(ll)ans*a%mod;
    return ans;
}
int main(){
    freopen("coin.in","r",stdin);
    freopen("coin.out","w",stdout);
    ri p;
    rll k;
    scanf("%d%lld",&p,&k);
    if(p==1)
        printf("%lld\n",k);
    else
        p=fpow(p,mod-2),
        printf("%lld\n",(ll)p*(fpow(p,k)-1+mod)%mod*fpow(p-1,mod-2)%mod);
    return 0;
}
01-31 19:13