abc--280--E
阿新 • • 發佈:2022-12-04
題目大意
一個人有n條命,你有p%的概率一次打它兩條命,有(100-p)%的概率一次打他一條命
求你打死它需要的次數的期望值
思路
其實也就和走臺階的那個題目是一樣的,用dp寫就行了
每一次只會打一點血或者兩點血,也就上從上面兩個狀態進行轉移就可以了
f[i] = f[i-2]*p/100 + f[i-1]*(100-p)/100
只需要對這個值進行求逆元就可以了
程式碼
#include <bits/stdc++.h> using namespace std; const int M=2e5+5; #define int long long const int mod=998244353; inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f; } int kpow(int a,int b) { int ans=1; while(b) { if(b&1)ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans; } int f[M]; signed main() { int n=read(),p=read(); f[0]=0; f[1]=1; //從哪裡轉移過來的概率 for(int i=2;i<=n;i++) f[i]=(1+(f[i-2]*p+f[i-1]*(100-p))%mod*kpow(100,mod-2)%mod)%mod; cout<<f[n]; return 0; }