时间安排
8:00–8:05 读题,感觉全都是推性质然后乱搞的。
8:05–8:40 T1,写了个dfs。直觉上感觉这个匹配和border有关,于是打了个表,什么都没看出来。没有性质DP貌似无从下手,先做T2。
8:40–9:15 T2。n=2的时候是个类似于下凹的函数,于是写了三分。简单推一下了一下贪心,唯一问题是组的贡献和人的贡献不好维护,直接贪心不好处理。考虑能不能DP,对于m<=50貌似时可以的,不过是个 m6m^6m6 啥都过不了,取max,min的部分貌似可以用前缀和优化掉,不过时间依旧很紧就没写。想到能不能二分答案转变成check问题,那么就要构造,构造离不开策略和贪心于是就放掉了。
9:15–9:35 T3,有一个直观的n^3做法,不过对应的点是个 n<=10n<=10n<=10 很明显对应的不是这个做法,考虑怎么优化到 n2n^2n2。发现可以幷查集贪心乱搞。对于 n<=6e4,2e5n<=6e4,2e5n<=6e4,2e5 的数据感觉可以上莫队,不过幷查集的操作不可逆,于是想到回滚莫队,然而时间复杂度太紧了。更重要的是,后面n越来越大,维护幷查集这玩意只会越来越不可做,意识到可能自己找错方向了,可能有什么性质。推了一下性质,发现还是要用根号维护,甚至复杂度还不如幷查集。
9:35–10:30 T2,想 m<=50 怎么做。
10:30–13:00 T3,思考 50 ~75 分做法。
回顾&反思
T1:比赛的时候一直往DP上想,结果题解是个根据性质暴力枚举。一些关键性质没有推出来,导致做不下去。推性质的能力还是要加强。
T2:二分答案。不过具体怎么check还没看懂。
T3:首先是性质。其次是一堆套路。倒序扫描线,维护前缀;区间答案满足单调性;只维护不被包含的区间,使得答案的更新满足区间加减的性质;使用线段树实现log复杂度的区间删除,维护区间覆盖关系。不过最致命的还是性质,不找到性质,只想着优化朴素暴力的话,容易越走越偏,以至于和正解某得一点关系。这是个老问题了。
博主在一场算法竞赛中遇到挑战,对三个题目进行了深入分析。T1未能发现关键性质,导致无法进行DP。T2尝试二分答案但未能构造有效检查。T3通过直觉提出n^3解决方案,后转向莫队算法,但因性质不明和时间限制未成功。反思中认识到推性质和理解题意的重要性。
144

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



