[ABC280E] Critical Hit 题解
前言
第一次赛时
解法
设
很显然,边界条件
由题意,可知每次攻击有
整理得
特别地,因为血量小于等于
除法用乘法逆元实现即可。
放代码:
#include<bits/stdc++.h>
#define int long long // 记得开 long long
using namespace std;
const int mod=998244353;
main(){
ios::sync_with_stdio(false);
int n,p,inv=828542813; cin>>n>>p; // inv 为 mod 998244353 意义下 100 的逆元
vector<int> a(n+1); a[n]=0;
for(int i=n-1;~i;i--) // 往前倒推,注意处理边界情况
a[i]=((i?(p*inv%mod*(i==n-1?0:a[i+2]+1))+((100-p)*inv%mod*(a[i+1]+1)):a[1]+1)%mod);
cout<<a[0]<<endl;
return 0;
}