隐藏页面特效

[深海少女与胖头鱼]

1|0深海少女与胖头鱼


1|1题目大意


n个带盾的鱼和m个不带盾的鱼,求将他们全部打死的期望次数(其中打到带盾的鱼会让它的盾消失,但是又会让其他所有鱼带上护盾)

1|2做法


考虑两种情况:打到带盾的鱼和不带盾的鱼,我们令f(n,m)表示打死n个带盾的和m个不带盾的期望值

情况1:打到了带盾的,概率是nn+m,那么攻击完这一下之后将会面对的情况就是n+m1个带盾的和1个不带盾的

情况2:打到了不带盾的,概率是mn+m,那么攻击完这一下之后将会面对的情况是n个带盾的和m1个不带盾的

综上可以推出公式f(n,m)=nn+m×f(n+m1,1)+mn+m×f(n,m1)+1

根据上式可以发现,出现了m1,所以只适用于m1的情况,于是我们考虑m=0时,由于只能打带盾的故:f(n,0)=f(n1,1)+1,这个f(n1,1)套入刚才的公式联立就可以得到

{f(n1,1)=n1n×f(n,1)+1n×f(n,0)+1f(n,0)=f(n1,1)+1

将②代入①得到:f(n,1)=f(n1,1)+n+2递推式的话可以相加

f(n,1)=f(n1,1)+n+2
f(n1,1)=f(n2,1)+(n1)+2
f(n2,1)=f(n3,1)+(n2)+2
.
.
.
f(1,1)=f(0,1)+1+2

将上面的式子相加会得到f(n,1)=f(0,1)+2n+i=1ni其中f(0,1)=1

整理得f(n,1)=n2+5n+22定义一个函数calc(x)=x2+5x+22

综上就推出了对m所有的情况,

f(n,m)={f(n,0)=f(n1,1)+1=calc(n1)+1(m=0)f(n,1)=calc(n)(m=1)f(n,m)=nn+m×calc(n+m1)+mn+m×f(n,m1)+1

1|3说明


因为程序中设计到分数,比如nn+m它等效于n×(n+m)1其实我们要求(n+m)在模p意义下的逆元,由于题目中给的998244353是质数,则有ap11 (mod p),所以a在模p下的逆元是ap2 mod p

洛谷P6858

#include <cstdio> #include <iostream> typedef long long LL; using namespace std; const int mod = 998244353; LL n,m; LL inv(LL a) { LL res = 1; a %= mod; LL b = mod - 2; while(b) { if(b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } LL quickmul(LL a,LL b) { LL res = 0; while(b) { if(b & 1) res += a, res %= mod; a = (a + a) % mod; b >>= 1; } return res; } LL calc(LL x) { x %= mod; LL res = x * (x+5) + 2; res >>= 1; return res % mod; } LL f(LL n,LL m) { if(!m) return calc(n-1)+1; else if(m == 1) return calc(n); else { LL Inv = inv(n+m); return 1 + (quickmul(n,Inv)*calc(n+m-1)%mod) + (quickmul(m,Inv)*f(n,m-1)%mod); } } int main() { scanf("%lld%lld",&n,&m); // printf("%lld",quickmul(n,m)); printf("%lld",f(n,m) % mod); return 0; }

__EOF__

本文作者风丨铃
本文链接https://www.cnblogs.com/-Wind-/p/18322638.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   风丨铃  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示