ABC270 E~Ex

E:

当他执行了 m×n 次操作,我们称他执行了 m 轮操作。

显然我们可以二分出最早在第几轮的时候吃掉的苹果不小于 k

时间复杂度 O(nlogk)

Code

F:

显然可以枚举四种情况:不用机场和码头/只用机场/只用码头/机场码头都用。

如果使用机场,就建一个虚点 n+1,对于每个点都连一条边 (i,n+1,xi)

如果使用码头同理,也建一个虚点 n+2,对于每个点都连一条边 (i,n+2,yi)

公路的边一定要连上。

对于每种情况跑一遍 Kruskal 就好了。

Code

G:

首先 S=G 直接输出 0

A=0 时,有 Xi={S    (i=0)B    (i>0),可以 O(1) 计算。

A=1 时,有 Xi=S+Bimodp,所以 iGSB(modP),也可以 O(1) 计算。

A2 时,有 Xi+BA1A(Xi1+BA1)(modP),所以 AiG+BA1S+BA1(modP),可以使用 BSGS 配合哈希表(这里我用了 unordered_map),可以认为是 O(P) 的。

Code

Ex:

假设当前的局面为 b1,b2,,bn,定义距离 k=max(aibi),表示当前状态和终止状态的距离。

f(k) 表示距离为 k 的状态期望需要多少步到达终止状态,则 f(0)=0,答案为 f(an)

假设 a1al<kal+1an,即 l 是最大的小于 ka 的位置。

那么假设下一步操作到的 i 满足 1il,那么距离会变成 k1,否则距离会变成 ai

那么可以得到转移 f(k)=1+1n(l×f(k1)+ni=l+1f(ai))

移项可得 f(k1)=1l(n×f(k)nni=l+1f(ai))

k 替换 k1 可得 f(k)=1l(n×f(k+1)nni=l+1f(ai)),其中 alk<al+1

注意到此时边界为 f(0)=0,答案是 f(an),这和转移的顺序不符合。

所以令 g(k)=f(an)f(k),那么转移变为 g(k)=1l(n×g(k+1)+nni=l+1g(ai)),边界为 g(an)=0,答案为 g(0)

直接计算预处理逆元和前缀和优化是 O(n+V) 的,考虑优化。

考虑对于固定的 l,对于所有 alk<al+1 转移形式相同,所以考虑设 G=ni=l+1g(ai)nl 是定值。

那么

g(al)=nlg(al+1)G=nl(nlg(al+2)G)G=(nl)2g(al+2)G(1+nl)==(nl)al+1alg(al+1)G(1+nl++(nl)al+1al1)=(nl)al+1alg(al+1)G(nl)al+1al1nl1

于是只需依次计算 g(an1),,g(a1)=g(0) 即可,在过程中维护 ni=l+1g(i) 即可做到 O(nlogmod)

Code

posted @   Kobe303  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示