NOIP 2024 训练赛 20 总结

NOIP 2024 训练赛 20 总结


# 用户 总分数 A 29 / 35 (84.00) B 19 / 31 (69.35) C 12 / 33 (64.24) D 1 / 13 (43.08)
18 Zhang_Jiahao 240 100 0:59 0 / 100 1:32 100 4:06 40 / 100 3:03

A 菜园

知识点

差分。

B 逻辑表达式

知识点

DP,输入。

反思

  1. 输入问题:以后对于输入尽量找到更有限的结束条件,以免进入死循环。

C 三元组

知识点

线段树,字符串,Hash。

分析

枚举 \(j\),找能把它当成平均数的 \(i,k\),它们会形成数对,就变成了可变区间 Hash,分别正序的和倒序的来一遍比较即可。

反思

  1. 套路遗忘:想到了前面的所有,包括线段树,但是没想到 Hash 比较,最后也只能口胡计数水过去了。

D 超命运树

知识点

笛卡尔树,DP。

分析

建出笛卡尔树(小根堆),\(\operatorname{Set}(S)\) 就是集合在笛卡尔树上虚树的非叶结点数;\(f(S)\) 就是要求集合中的结点在虚树上不能同时有左儿子和右儿子,因为 \(\exists i \in S, \operatorname{len}(S) = \operatorname{len}(S \setminus \{ i \}) + 1\),我们发现,这其实就是要求 \(\operatorname{len}(S) = |S| - 1\),而如果有某一个 \(S\) 中的结点在虚树上同时有左右儿子,那么两边的最小值都会缩到这个节点上, \(\operatorname{len}(S)\) 就不可能达到 \(|S| - 1\)

统计 \(\operatorname{dis}(S)\) 不好直接从 \(S\) 的角度来统计,相反我们从 \(T\) 从下往上来就可以。

对于非叶子节点,有三种转移:

  • 左右子树都不选,这个节点就是虚树上的叶子节点。
  • 左右子树中有一侧选了,那么此时 \(u\) 对于 \(S,T\) 来说都是可选可不选的,对于 \(S\) 来说,另一侧子树还能至多再选一个点,如果选了点那么 \(u\) 必选。
  • 左右子树都选了,此时 \(u\) 不能选进 \(T\),但是可以选进 \(S\)

最后 \(T = \varnothing\) 的情况还要考虑,一共 \(n+1\) 种。

反思

  1. 部分分没有想到:部分分的高维前缀和没有想出来,只想到了枚举子集,痛失 \(20\%\)
  2. 性质挖的不够:想到了笛卡尔树但是不知道怎么用,就是因为 \(f(S) = [\operatorname{len}(S) = |S| - 1]\) 没有推出来。

总体反思

  1. 输入问题:第二题直接爆零,以后尽量少写这种不确定性强的输入。
  2. 知识点套路遗忘:哈希判序列相同都忘了,还有高维前缀和没有想到。
  3. 理解不透:最后一题的式子到了后面就是死算,根本没有转化。
  4. 题意分析:明知道最后一题的复杂式子一定是要转化到图论上,但是还没有去转化。
  5. 分配时间:最后一题暴力查错好久。
  6. 检查:有了但还是不够全面,感觉很多细节还是没看。
posted @ 2024-11-28 15:52  Add_Catalyst  阅读(18)  评论(0)    收藏  举报