qbxt 4219: npc与slime

原题

一条路径上有 n 个位置,有三种元素:slimenpcplayer
slime 初始会向右移动,npc 初始会向左移动,所有元素移动速度是相同的:1 单位距离每 1 单位时间。
元素的移动遇到边界会改变初始移动方向,并继续移动。
我们称 playernpc 为人类,npc 带有初始为 0 的能力值。
你作为 playernpc 有相同的移动规则,由于带有主角光环,你若出生在位置 i 初始会有 si 的能力值。
若有某两元素相遇,他们会开始战斗,战斗不改变移动方向,战斗总是遵循以下两种规则。
1、人类与 slime 相遇:人类总是胜利,胜利后人类能力值 +1
2、人类与人类相遇:能力值大的获胜,若能力值相同,则 player 获胜,能力值不发生改变。
可以证明,这两条规则覆盖了所有情况。
失败的一方将被立刻移除游戏,胜利的一方将仍继续行进。
由于你是主角,你的左侧总是以 100% 的概率刷新 slime,你的右侧总是分别以 50% 的概率刷新 npc 或者 slime
对于 1,n 两个特殊位置有特殊的刷新规则:1 号位置总是 slimen 号位置总是 npc
你需要求出来你以相同概率随机出生在 [2,n1] 的某一位置,经过 单位时间后,仍存活的概率。
你需要注意,游戏的进程总是 player 先刷新,然后以一定概率刷新 slimenpc,然后开始游戏。
可以证明概率总是一个有理数 xy,你只需要输出这个数对 998244353 取模的结果。
保证 s1=sn=0
对于所有测试点满足 3n5×105,0si109

一道二项式反演题

我们假设现在在考虑第 i 位,令 B=si+i1 ,我们让 f(n) 表示钦定 nslime 长度 =B+1 ,之后跟一个 npc 时的方案数(这里如果 >B+1 的连续段怎么办?一会再说),我们可以知道 g(0)=i>0(1)i(i0)f(i)=i>0(1)if(i)

我们考虑怎么求 f(k) ,我们用组合数,我们先确定 k 个连续段,然后考虑往这 k+1 个位置里插入剩下的 ni1k×(B+2)slime (其中 1 的原因是我们钦定的是 slime ),这里直接用插板法:把这些史莱姆插到 k+1 个空里的方案数

一些细节:由于 n 号节点始终是 npc ,我们要讨论在钦定不满足条件的连续段时是否钦定了 n 这一个 npc

复杂度分析:有人觉得这是 O(n2) 的,但我们发现玩家在 i 位置时能力值至少为 i1 ,因此复杂度为调和级数,最终复杂度 O(nlogn)

posted @   FOX_konata  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示