2019 年 CCPC 秦皇岛现场赛复现赛

rank solved A B C D E F G H I J K L
? 9 Ø Ø Ø O . O . Ø O O O .

A

UpSolved by Henry.

极角排序。

B

UpSolved by XLor.

对 $A$ 集合的限制条件进行补集转化,则其价值等于 $|A| \choose 2$ 减去每个点的权值小于等于其自身的祖先个数。

假设每个点权值不同,考虑将 $B$ 集合一个放入 $A$ 集合的贡献,可以注意到要减去祖先和子树内来自 $B$ 集合本身的点的贡献,加上(实际为减去)祖先和子树内来自 $A$ 集合的贡献,这两部分合并起来等价于考虑了子树和祖先所有点,因此每个点从 $B$ 集合移到 $A$ 集合的贡献是一个常数,排序后贪心选取即可。

考虑存在相同权值的点对情况,容易证明深度小的点一定相对于大的点先选,并且先选浅的点能带来更多贡献,因此在转移贡献上多减去该点祖先上和该点权值相同的点个数,一起排序即可。

C

UpSolved by XLor.

简化问题:求一个串的本质不同子序列。

考虑 $dp[i]$,最后一个选 $i$ 位置产生的本质不同子序列个数,答案为 $\sum_{i=1}^n dp[i]$。

记 $last[i]$ 表示 $i$ 之前最后一个与第 $i$ 位字母相同的位置,有转移方程:

$$
dp[i]=\sum_{j=last[i]}^{i-1} dp[j]
$$

子问题一:求一个串长度为 $len$ 本质不同子序列个数,$dp$ 时添加一维长度。

子问题二:两个子序列分别匹配到位置 $i$ 和 $j$ 时的方案数,且两个子序列长度相同且位置对应相同,类似于简化问题,只不过是维护两个最后位置,转移时选一个矩形框。

子问题三:两个子序列从位置 $i$ 和 $j$ 开始匹配的方案数,且两个子序列长度相同,类似于子问题二,转移时选一个矩形框。

回到原题,应用子问题一,得到第一个子序列长度严格大于第二个的方案数,应用子问题二三,用类似的二维矩形框的方式容斥掉前面相同的部分,乘上使用子问题三的后缀矩形框,得到两个子序列长度相同时的方案数。

D

Solved by Henry.

签到。

F

Solved by XLor.

仙人掌。

H

UpSolved by Forsaken.

I

Solved by Henry.

dp。

J

Solved by XLor.

KMP。

K

Solved by Henry。

一个结论:如果存在一个叶子结点有兄弟,则其必胜,因为若他的后继有必胜态,则其先手一定也可以转移到这个必胜态,因此只会留下必败态给后手玩家。

考虑每个叶子结点第一个非二度祖先或根节点的父亲,如果存在一个距离是奇数,则必胜,因为先手玩家可以控制链的奇偶性,否则必败。