AtCoder Regular Contest 135 题解
A
最终拆分得到的数是若干个 和若干个 ,用 map
模拟拆分的过程即可。
B
考虑将 看作主元。那么发现,
- 如果 ,那么 。
- 如果 ,那么 。
- 如果 ,那么 。
其中 。
又因为 ,我们乱搞搞即可可以得到形如 的式子,由此可以得出一组合法的 。
C
记 ,那么可以发现能够得到的序列中第一个元素只有以下几种可能:
记这个集合为 ,那么题目等价于求 ,直接无脑建出 的 trie 树后在上面瞎 dfs 即可。
然后才发现 wssb,只用记录下 中每一位上 的个数,这样可以 地对每一个 计算 里的值。
D
一道我不是太擅长的转化 + 贪心。
u1s1 我整场比赛就败在这道题上了,过完 C 后我花了整整 20 分钟思考这道题却毫无头绪,丢了 D 开了 E 后才发现 E 比 D 可做许多,到后来会了 E 却没来得及调了 /ll/ll
记最终得到的序列为 ,令 ,。那么可以发现,一个矩阵 能够被得到的必要条件是 , 矩阵第 行的和等于 矩阵第 行的和;, 矩阵第 列的和等于 矩阵第 列的和。同时也不难证明其是充分条件:每一次通过 次操作将 第一列上的值变得相同,然后归纳下去即可。
也就是说题目转化为,给定一个矩阵 ,我们要求出令一个矩阵 ,满足 , 第 行上所有元素之和等于 的第 行上所有元素之和,, 第 列上所有元素之和等于 的第 列上所有元素之和。我们将这个过程倒过来,记 表示 矩阵第 行的元素和, 表示 矩阵第 列的元素和,那么每次操作等价于,选择一个 ,令 。要使得最终 且 最小。
不难发现答案下界是 。考虑这样构造达到这个下界:
- 首先,每次选择一组 的 ,然后执行操作 ,或者选择一组 的 ,然后执行操作 。、
- 如果找不到这样的 ,那么意味着 之一已经被情况,不妨假设 已经被清空,此时我们再找出一对 使得 ,然后执行 即可。
可以发现通过上述构造,答案刚好达到下界 。
时间复杂度 ,如果将 视作同阶。
E
u1s1 这个 E 真的比 D 可做!!!!111
首先暴力求解答案非常容易:每次找到 且为 的倍数的最小数作为 。
注意到这样一个性质,就是当 大概达到 时,,也就是说 在 附近的某个位置之后是一个等差数列。
这样我们就得到了一个 的做法,对小于这一阈值的部分暴力,大于这一阈值的部分等差数列求和,想法很好,唯一的不足是过不去(
考虑优化,直觉告诉我们,当 达到一个小于 的临界值时, 也开始成等差数列——更具体地,是一段一段等差数列。我赛时打了个表,发现当 时, 中, 的等差数列段数大概是 ,但 中, 的等差数列段数只增长到了 ,这意味着 后面这一部分等差数列段数是很少的,因此直接暴力找等差数列即可,找等差数列可以二分右端点,然后判是否前一项都大于后一项即可,这容易 判断。事实上,官方题解证明了等差数列段数是 的,有兴趣可以研究官方题解(
为什么赛时没调出来 /fn/fn/fn
F
太难了,日后有时间再慢慢研究。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2021-02-14 Prufer 序列
2021-02-14 Codeforces 632F - Magic Matrix(暴力 bitset or Prim 求最小生成树+最小瓶颈路)