ABC270 E~Ex
E:
当他执行了 m×n 次操作,我们称他执行了 m 轮操作。
显然我们可以二分出最早在第几轮的时候吃掉的苹果不小于 k。
时间复杂度 O(nlogk)。
F:
显然可以枚举四种情况:不用机场和码头/只用机场/只用码头/机场码头都用。
如果使用机场,就建一个虚点 n+1,对于每个点都连一条边 (i,n+1,xi)。
如果使用码头同理,也建一个虚点 n+2,对于每个点都连一条边 (i,n+2,yi)。
公路的边一定要连上。
对于每种情况跑一遍 Kruskal 就好了。
G:
首先 S=G 直接输出 0。
当 A=0 时,有 Xi={S (i=0)B (i>0),可以 O(1) 计算。
当 A=1 时,有 Xi=S+Bimodp,所以 i≡G−SB(modP),也可以 O(1) 计算。
当 A≥2 时,有 Xi+BA−1≡A(Xi−1+BA−1)(modP),所以 Ai≡G+BA−1S+BA−1(modP),可以使用 BSGS 配合哈希表(这里我用了 unordered_map
),可以认为是 O(√P) 的。
Ex:
假设当前的局面为 b1,b2,⋯,bn,定义距离 k=max(ai−bi),表示当前状态和终止状态的距离。
设 f(k) 表示距离为 k 的状态期望需要多少步到达终止状态,则 f(0)=0,答案为 f(an)。
假设 a1≤⋯≤al<k≤al+1≤⋯≤an,即 l 是最大的小于 k 的 a 的位置。
那么假设下一步操作到的 i 满足 1≤i≤l,那么距离会变成 k−1,否则距离会变成 ai。
那么可以得到转移 f(k)=1+1n(l×f(k−1)+∑ni=l+1f(ai))。
移项可得 f(k−1)=1l(n×f(k)−n−∑ni=l+1f(ai))。
用 k 替换 k−1 可得 f(k)=1l(n×f(k+1)−n−∑ni=l+1f(ai)),其中 al≤k<al+1。
注意到此时边界为 f(0)=0,答案是 f(an),这和转移的顺序不符合。
所以令 g(k)=f(an)−f(k),那么转移变为 g(k)=1l(n×g(k+1)+n−∑ni=l+1g(ai)),边界为 g(an)=0,答案为 g(0)。
直接计算预处理逆元和前缀和优化是 O(n+V) 的,考虑优化。
考虑对于固定的 l,对于所有 al≤k<al+1 转移形式相同,所以考虑设 G=∑ni=l+1g(ai)−nl 是定值。
那么
于是只需依次计算 g(an−1),⋯,g(a1)=g(0) 即可,在过程中维护 ∑ni=l+1g(i) 即可做到 O(nlogmod)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话