吐槽:
考试的时候一直推的是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;
}