AtCoder Beginner Contest 348

Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)

年轻人的第一场 abc

2024/04/06 打的,2024/06/20 补了下题解

比赛链接

Problems AC
A. Penalty Kick
B. Farthest Point
C. Colorful Beans
D. Medicines on Grid
E. Minimize Sum of Distances
F. Oddly Similar
G. Max (Sum - Max)

A

A - Penalty Kick

B

B - Farthest Point

C

C - Colorful Beans

D

二维网格,起点终点,有障碍物,有一些格子有药,药的作用是将体力值变为 c[i][j],可以选择用不用
初始起点,体力值为 0,问能否走到终点。

<censored>就一个点 WA 有点搞心态

采用类似 SPFA 的写法

D - Medicines on Grid

E

E - Minimize Sum of Distances

F

有 n 个长 m 的序列,问有多少对序列“相似”
假如两个序列相似,说明有奇数个位置相同
n <= 2e3

朴素做法是 O(n^2m),(吸氧能跑过 at 的机子)

这种 bool 数组想办法搞搞 bitset 优化

$cnt[j][k]$ 是一个大小为 n 的 bitset,假如 a[i][j] = k,则 cnt[j][k][i] = 1

枚举每一行,把每一列的情况 xor 在一起,统计一下 xor 结果中 1 的个数

F - Oddly Similar

G

您有两个整数序列 $A$ 和 $B$ ,长度为 $N$ 。对于 $k = 1, 2, \ldots, N$ ,解决以下问题:

  • 考虑在 $1$ 和 $N$ 之间选择 $k$ 个不同的整数(含)。让 $S$ 成为所选整数的集合。找出 $\displaystyle (\sum_{i \in S} A_i) - \max_{i \in S} B_i$ 的最大值。

赛后听说是 2023 CCPC 网络赛的原题 QOJ # 7523. Partially Free Meal

Tutorial

首先考虑 $k$ 固定时的答案。将所有盘子按照 $b$ 从小到大排序,枚举第 $x (k \le x \le n)$ 个盘子作为 $\max_{i \in S} B_i$,那么剩下要选的 $k - 1$ 个盘子就是 前 $x - 1$ 个盘子中最大的 $k - 1$ 个。给定 $k$ 和 $x$,可以通过可持久线段树在 $O(log n)$ 的时间内求出对应方案的值 $w(k, x)$。

接下来精彩的一步是证明决策单调性:随着 $k$ 增大,最优情况下的 $B_{max}$ 是非严格单调递增的。

感性理解一下,当你选的数越来越多,你的 $B_{max}$ 会不得不越来越大。因为假如 k’ = k + 1, 那么假如 $B_{max}$ 变小了。意味着你放弃了那个最大的,改选了一个小一点的数。那这样的话他在 k 的时候应该就不是最优的了。

令 $f(k)$ 表示使 $k$ 取到最优解的 $x$。对于两个不同的决策 $x, y (x < y)$,若 $w(k, x) \leq w(k, y)$,那么增大 $k$ 之后由于 $y$ 的可选择范围严格包含了 $x$ 的可选择范围,因此 $y$ 新选的 $a$ 值一定不小于 $x$ 所选的,即 $w(k′, x) \leq w(k′, y)$ 对于 $k \leq k′ \leq n$ 恒成立。由此可得 $f (1) \leq f (2) \leq f (3) \leq \ldots \leq f(n)$,最优决策具有单调性,可以分治求解,共需计算 $O(n log n)$ 个 $w(k, x)$ 的值。

Code

Author

TosakaUCW

Posted on

2024-04-06

Updated on

2024-06-20

Licensed under

Comments