Posted in: QuestOJ 比赛题解

「FZOI」OI 寒假赛 #12 Div.1 – 题解

A - 幼儿园

这道题的来源是 CF Div.2 D,只有 20 多个人过了。我在比赛的时候差点把这题写出来,然后因为一些玄学错误彻底 GG。

无疑,这是正常比赛中最难的题。但是这道题并不难想:我们可以把多个线段的端点提取出来,然后做一次「线段剖分」。如下图所示:

Read More "「FZOI」OI 寒假赛 #12 Div.1 – 题解"

Posted in: QuestOJ 比赛题解

「FZOI」OI 寒假赛 #1 Div.1 – 题解

A - 资本家 kal0rona

我们可以考虑把每个员工的前缀收益放在折线图上进行考虑:一条折线从$(1, 0)$出发,在$(x, y)$向上走就是给第$x$个员工发钱,上升高度就是发钱数量。最后,把老板当作第$n + 1$个员工即可。可以发现,因为这个是前缀收益,所以最后我们会走到$(n + 1, m)$,我们只需要算从$(1, 0)$到$(n + 1, m)$的不降路径数即可,也就是${n + m \choose m}$。

Read More "「FZOI」OI 寒假赛 #1 Div.1 – 题解"

Posted in: QuestOJ 比赛题解

「FZOI」OI 周赛 #1 Div.1 – 题解

致歉

由于准备的比较仓促,所以这次周赛组题上出现了一些问题,并对受影响的选手表示道歉。

题解

A - 回旋旅行

显然是一个 Hamilton 路径,设置状态$dp[stat][j]$来进行转移即可。

B - 模拟赛水题

这道题的原题是 CF1257E。考虑对于当前三个序列的每一个序列都在值域上做一个前缀和,记为$prefix_1[i], prefix_2[i], prefix_3[i]$。考虑枚举值域上的两个断点$i, j$,那么操作次数则为:$prefix_1[n] - prefix_1[i] + prefix_3[j] + prefix_2[i] + prefix_2[n] - prefix_2[j]$。这样做$\Theta(n^2)$次,取最小值即可拿到答案,可以得到 60 分。

那么正解是啥?我们发现式子中有两项可以放在一起来算:$prefix_3[j] - prefix_2[j], i < j$。我们只要考虑让这个部分最小即可让当前选中$i$的决策下值最小。做个后缀最小值即可。

C - 彩灯

这道题的出题人为长沙市雅礼中学的 Wearry。以下是他的原题解:

<hr >

子区间之间只有相互包含和不交的关系,因此它们的包含关系会构成一棵树。

首先考虑一个暴力的解法,
记 $f[i][j]$ 表示在 $i$ 为根的子树中点被覆盖的最多次数为 $j$ 的最优答案,
转移的时候首先将所有子树的答案直接合并,然后考虑点 $i$ 的贡献:

$$
f[i][j] = \max{f[i][j], f[i][j-1] + a[i]}
$$

不难发现可以维护 $f[i]$ 的差分表,
则 $f[i]$ 的差分表一定单调,
则合并子树相当于将差分表对应相加,
点 $i$ 的贡献则相当于将 $a[i]$ 按照大小顺序插入差分表。

Posted in: QuestOJ 比赛题解

kal0rona 的 CSP-S2 模拟赛 #1 出题分析

Day 1

篮球 - Basketball

前 30% 的数据

直接枚举上场状态和中间断开的点,由于上场状态只有上场和不上场,所以总的复杂度是$\Theta(2^n n)$。

正解

我们发现球员的数位非常小,且上场球员也非常少。那么,我们可以考虑设计一个前缀异或和还有后缀与和,那么在相同的数字上相乘即可得到结果。$prefix[i][j]$表示前$i$个中,能凑成$j$的方案数,$suffix[i][j]$表示$[i, n]$中,能凑成$j$的方案数。相乘的时候要固定后缀部分一定要选当前球员,这样可以避免算重。

Read More "kal0rona 的 CSP-S2 模拟赛 #1 出题分析"