Atcoder Beginner Contest 326 (ABC326)
不知道为什么拖到现在,我是摆怪。
A. 2UP3DOWN
模拟,略。
B. 326-like Numbers
模拟,略。
C. Peak
双指针板子。
D. ABC Puzzle
基础 dfs。
但是赛时不知道为什么觉得状态数不会很少,于是写了一个巨大复杂的状压。这里粗略算算有效状态数:
仅考虑每行的限制,有 种选择填数位置的方法。又因为第一个数填什么是固定的,选定位置后只有 种不同填法。那么每行的有效状态数为 。
也就是说总的状态数最多只有 ,当然这里没有考虑列的限制,实际上合法状态远比这个少。所以直接 dfs 是能过的。
E. Revenge of "The Salary of AtCoder Inc."
设 表示游戏能进行到 的概率,则答案是 。
观察到 在游戏过程中单调递增,则有转移 。
F. Robot Rotation
Description
有一个机器人位于坐标系原点 ,面向 轴正方向。
在每一秒开始前,你可以选择让这个机器人向左或向右旋转 度,不可以不转。接下来,机器人沿它面对的方向前进 个单位距离, 为当前秒数。
给定总时间 ,序列 和机器人最终的位置 。请构造一个合法的操作序列(用 L
和 R
表示每步操作的方向),或判断无解。
。
Solution
因为不能不转弯,可以发现机器人一定是横竖交替行走的。进一步观察,发现奇数秒机器人只改变 坐标,否则只改变 坐标。
那么 坐标是互不影响的,这启发我们把横纵坐标分开考虑。这里以横坐标为例,设序列 的所有偶数位组成序列 。
问题转化为给一个序列 ,可以自由选择每个 的正负号,问是否存在方案使 。
这看起来像是值域极大的 01 背包,显然不太可做。从数据范围的角度考虑问题, 的长度至多只有 。
考虑将序列 拆成前后两部分,则每一半只有 个数,对应着 种状态。我们求出前一半的所有状态存进 map
,在枚举后一半状态为 时判断 是否在 map
中存在即可。
时间复杂度 。
G. Unlock Achievement
完全没想到网络流(
Description
有 个技能, 个成就。每个技能有一个等级,初始均为 。
你可以用 块钱令技能 提升一个等级,该操作没有次数限制。
第 个成就达成的条件是对于 ,其中 表示第 个技能的等级。达成成就 后,你会获得 元的奖励。注意这里奖励与成本是分开的,也就是说你不能用奖励的钱去提升等级。
请最大化获得的奖励与所需成本之差,并输出该值。
。
Solution
考虑构造最小割模型。
因为 ,把点 拆成 个点,分别为 。令成就 为点 。则进行如下的建图:
- 连接源点 与 ,容量为 。
- 连接 与 ,容量为 ,割掉这条边则表示将技能 升级到 。
- 连接 与 ,容量为 。
- 连接 与 ,容量为 。如果这条边被割掉,说明至少有一个技能的等级未达到该奖励的条件,不能获得奖励。
那么这个图的最小割就是成本与未获得的奖励之差,用总奖励减去最小割即为答案。
本文来自博客园,作者:樱雪喵,转载请注明原文链接:https://www.cnblogs.com/ying-xue/p/abc326.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?