ARC136 简要题解
A
首先,字符 c
等价于分隔符,因此遇到 c
直接输出。
否则遇到一个 a
将其变为 bb
无意义,因为要求字典序最小这个位置必须填 a
,因此遇到 a
也直接输出。
否则遇到 b
如果其后为 b
则一定需要把这个 bb
变为 a
,否则若其后为 a
则最优方案为:ba -> bbb -> ab
.
复杂度 O(n).
B
首先把 a,b 集合不同的情况判掉。
注意到操作可逆,于是直观的想法是将 a,b 排成有序后比较。
朴素的想法是每次从后面挑一个最小的元素然后 shift 到最前面,但当元素有重复时这样不一定能够正确排序。
于是分所有元素是否互不相同考虑。
当所有元素互不相同时,直接这样模拟即可,但存在更快的方式:
- 将序列离散化为排列,每次操作后排列奇偶性不变。
存在元素相同时,可以证明 a 一定可以通过操作得到 b。
证明:记任意一种重复的元素为 x,从序列中取出两个 x,其余部分按照朴素想法排序,将两个 x 移动到最后,除了最后三个元素 a,b 均相同,最后三个元素可重集相同,由于最后三个数存在相同的数因此一定可以到达。
复杂度 O(nlogn),瓶颈在于排序。
C
序列上为经典问题,考虑两个相邻数之间间隔作为左右括号数量的下界,容易证明这个下界易于达到。
对于环上的问题,由于左右两端接在一起,只考虑下界有可能使得最后剩余的元素 >0,通过手玩发现答案为:
证明:记前者为 S,后者为 M,根据 S, M 的大小关系讨论(需要将问题拓展到 a_i \ge 0 的情况)。
若 S < M,则 a 中一定不存在 0,将全体减 1,最大值减 1.
若 S = M,考虑环被极长的最大值段分割成了几段,则一定至多一个段存在 0,单独不操作这个段,S, M 同时减 1.
若 S > M,任选一段极长的最大值连续段减 1,S 减 1.
复杂度 \mathcal{O}(n).
D
等价于统计 10 ^ 6 - 1 - a_i 处所有 a_i 的 6 维前缀和,复杂度 \mathcal{O}(D10 ^ D + n)(D = 6).
E
通过观察每个点 i 不可以到达的点的性质,将 j > i 且 j 为质数的部分删去,发现 2 \mid i 时点集相比于 2 \nmid i 时少很多,于是分 i 的奇偶性打表考虑,同时将不可达点 j 质因数分解观察,可以得到如下结论:
- i(i \ne 1) 可达 j 当且仅当 i + [2 \nmid i]\mathrm{lpf}(i) \le j - [2 \nmid j]\mathrm{lpf}(j) 其中 \mathrm{lpf}(i) 为 i 的最小质因子。
证明:i + \mathrm{lpf}(i) 为 i 后面 i 第一个直接相连的点,j - \mathrm{lpf}(j) 为 j 之前与 j 第一个相邻的点,于是必要性显然。
充分性也可以根据其以及 i, i + \mathrm{lpf}(i) 奇偶性相反,j, j - \mathrm{lpf}(j) 奇偶性相反简单构造得到。
问题转化为给定 n 个区间,选取最大的带权子集使得区间两两相交且交点数量 > 1 或不在端点。
交的长度 > 0 的问题是简单的,直接枚举最后交中的一个点,覆盖该点的区间都选即可。
注意到区间只有两种,2 \nmid i 时 i - \mathrm{lpf}(i), i + \mathrm{lpf}(i) 均为偶数,因此仅考虑奇数点区间交长度必然要么为 0 要么 > 1.
于是可以直接将奇数点区间两端往里缩减 1,此时转化为交长度 > 0 的问题,复杂度 \mathcal{O}(n).
F
二元生成函数 + 类 ZJOI 2019 开关,复杂度 \mathcal{O}((nm) ^ 2).
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库