时间安排
8:30–8:45 浏览题目,T1,T2是送分的。T3,T4可能都是性质题,暂时看不出什么。
8:45–9:00 T1,随便坐一下就行了。T2,注意到路径是有向无环的,所以建图拓扑就可以了。
9:00–10:41 T3, n≤1e7n\leq 1e7n≤1e7 感觉是一个纯粹靠性质的题目。于是自己手动模拟了一下拼的过程,直觉告诉我拼的方式是有限的,也许可以用这个DP,但是什么都模拟不出来。于是写dfs打表。对着表等了半个小时,可以看出一些特殊情况的规律拿到60分。试图找数学上的规律但是失败了。
10:41–12:00 T4,发现题目本质是要求至多两个的等差序列,对于小数据可以枚举等差和起点暴力。然后就没有进展了。直觉告诉我当值域和 n 较大时,等差不会太大,但是具体多少不知道,而且这并不能降掉枚举数值起点和等差的复杂度。
12:00–12:30 T4,随便写了个骗分。
12:30–13:00 对着T2瞪。
回顾反思
T1,T2 : 这种送分题尤其要稳,不要挂分。
T3: 和我预料的一样,在题目的强限制下,实际考虑的情况数是很少的,于是直接对情况 DP 就好了。自己考试的时候尝试过去讨论情况的有限性,但是没有利用好题目的强限制条件导致什么都没推出来。这种性质题一定要抓住题目条件,先考虑强限制下哪些是固定的,再去讨论不定的内容,再去看在当前假设下哪些被固定或者说限制死了,否则会导致繁多和无意义的讨论。
T4: 比较神奇的一点是,这个题用到了一点数学知识:带权中位数。对于答案是由一个上界的,所以可以暴力枚举 d ,那么一个值的贡献映射到其对应等差数列数值起点起点数的贡献,也就是假设确定了一个等差数列数值起点,那么原序列每个数操作的贡献就对应了每个原数对应的等差数列起点对于当前假设确定的等差数列数值起点的贡献。那么问题变为了在 n 个数中选一个带权意义下的中位数,左边是 2 的带权,右边是 1 的带权。
有结论,对于左边 xxx 权,右边 yyy 权,那么中位取第 n−⌈ynx+y⌉+1n-\lceil \frac{yn}{x+y}\rceil+1n−⌈x+yyn⌉+1 处的数最小,具体这里左 2 权右 1 权就应该取 n−⌈n3⌉+1n-\lceil\frac{n}{3}\rceil+1n−⌈3n⌉+1 处的数,对于奇偶性的问题 -1 扰动一下就好了。
那么用对顶堆就可以快速实现找第 k 大的数。问题就解决了。
- 这次T3最初的想法和正解方向还是接近的:在题设条件下情况数有限。但是由于没有利用好题目的强限制条件,推的方向有一定问题没能推出具体的结果。这种性质题一定要抓住题目条件,先考虑强限制下哪些是固定的,再去讨论不定的内容,再去看在当前假设下哪些被固定或者说限制死了,否则会导致繁多和无意义的讨论。
- 带权中位数:有结论,对于左边 xxx 权,右边 yyy 权,那么中位取第 n−⌈ynx+y⌉+1n-\lceil \frac{yn}{x+y}\rceil+1n−⌈x+yyn⌉+1 处的数最小,具体这里左 2 权右 1 权就应该取 n−⌈n3⌉+1n-\lceil\frac{n}{3}\rceil+1n−⌈3n⌉+1 处的数,对于奇偶性的问题位置 -1 扰动一下就好了。
本文记录了一场编程竞赛的时间分配策略及解题思路。针对四道题目分别进行了初步分析、解题尝试与深入思考,并总结了解题过程中的得失,强调了抓住题目条件的重要性。
476

被折叠的 条评论
为什么被折叠?



