现在列出我学习的算法和掌握熟练度:
(1为很熟,2为熟练,3为会但没有做什么题,4为不会)
暴力 1
二分 1
贪心 1
三分 2
0/1分数规划 1
最短路 1
线段树 1
平衡树 2
树分治 2
平面数点 3
分治 1
mobius反演 2
二进制分组 3
基础数据结构 (队列,栈,链表)2
并查集 1
均摊分析 2
树剖 1
lct 2
ett 3
搜索剪枝 2
生成函数 2
常见多项式科技 2
不常见多项式科技 4
字符串匹配数据结构 2
后缀数据结构 2
随机化算法 3
pollard-rho 3
基础平面计算几何 3
进阶平面计算几何 4
立体计算几何 3
分块 2
基础dp 1
斜率优化 2
决策单调性 3
可持久化思想 2
最小圆覆盖 4
支配树 4
莫队算法/思想 2
嵌套数据结构 3
基础数论 1
进阶数论 2
差分约束 2
线性规划 4
网络流 2
筛法 3
特殊的公式 3
这说明我的常考算法较为熟练,但是不常见算法不熟练甚至不会。
本人在上一年做出了很多努力。虽然在联赛中获得了400+分,入选了THUWC。
但是在THUWC内还是暴露出了我很多问题。
首先day1花了3h+才pp了A,原因是对linux系统不熟练,没有使用gdb系统调试的经验。
并且在考试时想复杂了,认为A要使用倍增才能做。于是写了个倍增+单调栈上二分。细节十分多。
这让我没有时间认真思考C,且没有写C的暴力。
并且对于评测系统的不熟悉,导致在最后一次提交B题的时候,提交了完全错误的版本且没有交正确的,白白丢了30+分。
在day2,本人没有信心,在A上只有写确定性算法的思维定式,没有写只记录最大值最小值的错误做法+暴力。
并且没有注意到值域<=15的条件,以为这个条件只是为了符合int128的要求而设定的,于是在考场上自闭5h成功只有19分。
实际上。day2的A是一个很简单的状态压缩dp。本人在后来随便想一下就想出来了。
虽然在分类讨论答案的时候,会发现只记录最大值/最小值不可行。
但是发现只有正/负 255个数可以替代当前数。所以直接状态压进255个数即可。
dqa2019写了一个平衡规划做法成功签到。然而我因为思维定式没有想到A。
这说明我的思维定式十分严重。
这会让我做不出很多简单题。让我在考试里得不到等于水平的分数。
比如HNOI2018 道路 这道题是一道非常简单的dp题,但是在考试上AC的人不多,很多都是因为思维定式没有做出来。
这说明思维定式会让人做不出题。
所以我要解除自己的思维定式。
并且我最近做题时,在看懂题解后,为了节省时间,代码很多都是对着题解写的。
这导致本人的代码能力较低。在打模拟赛时,很多次都是想到正解但是没写出来。
如果我代码能力强一点的话,我就能在THUWC上快速写完A的倍增+单调栈二分,并且在后面的题目上获得更加高的分数。在day2+也能拿到至少96分,如果我没有思维定式的话,我day2就能成功签到。
并且如果我有"打完暴力在想正解"的意识,且代码能力更强的话,我就能在day1,day2的B,C上获得更高分。从而在THUWC上拿到更多的分数。
这样子就能拿到二等奖,甚至能拿到一等奖。
并且day2B其实思维难度并没有day2A那么高。只要我会支配树。我就能拿到除暴力外的更多分数,更有希望拿奖。
除此之外,本人不擅长写没有正确性的证明的算法。本人的思维定式让我只写确定性证明的标准算法。
这让我没有在THUWC day2A上获得较高的分数。
本人也不擅长猜结论,发现题目的性质。做题只通过直接思路想。从来不敢猜性质,猜了性质也不敢证明。这让我在结论题(如THUWCday1 C)上的得分不高。
实际上,这道题想到bfs序的结论以后就是3维数点+点分治+线段树上二分。这个应该是比较容易想到的。
但是本人由于没有猜结论获得了0分。(获得0分也有1个原因是没写暴力)
实际上本人应该猜一下结论,这样子至少能获得nq的部分分,还有后面的高复杂度预处理部分分。
在链的部分分也能看到这个结论,但是我没有想链。
且自己积累常见套路的能力没有同学dqa2019高。这体现在我做的题目上。
本人做的题目大多都构造性很强,在套路的积累上不强。
反而dqa2019做的题目大多数都反映了一种套路。
比如dqa2019做的通道,是一个虚树+直径集合合并。这道题在第一颗树上边分治,在第二颗树上建出点集的虚树。
快速求出答案要一种有构造意味的做法。发现答案的式子有2个部分分别只和端点x,y有关,可以在第二颗树上的每一个节点上下挂一个端点进行直径合并。
这个思路十分巧妙,NOI2018 情报中心 s2部分也考到了这个性质(虽然是端点加权的)
这道题dqa2019在2019年上半年就做了,但是我是在去年年底才做,还是水过去的。
同样,紫荆花之恋的做法也是有构造意味的做法。它参考了替罪羊树在重构时的表现。
建出点分治树。在加点的时候直接在点分树上连加的边,同时更新点的大小和每个节点的平衡树
在点分树的一个节点的大小太大(大于父亲的大小乘一个常数)就暴力重构,重新再这个点的子树下进行点分治。
这道题dqa2019也是在2019年上半年就做了,而我在2020年才做的。
同样的例子还有NOI2018你的名字,[ZJOI2007]捉迷藏,诗人小G,CTSC2018 暴力写挂等。
并且dqa2019的代码都是自己写的,复制别人的代码进行对拍。而我很多代码都是看题解写的。这使我代码能力比较差。
实际上,自己写+调代码很多时候花费的时间不比学着题解写代码要少。
虽然我在写代码的时候理解了题解代码和思路的全部内容,也付出了很多努力
但是我的路还是走的十分不踏实。
除了特别有意思的的,本人做的题目有较多都不记得了。
这也能解释dqa2019在纪中打模拟赛拿了5次第一,吊打我的原因了。
所以我要做出一下改进措施:
1.所以以后我在做题时要先思考20min+,然后再看题解。除非这道题很神仙。
2.本人在打模拟赛时总是心不在焉。没有掌握考试经验。在打模拟赛时集中精力,获得尽量多的分数。
如果我在打模拟赛时不认真打,我就没有打暴力的意识。这也让我在联赛时暴力没有写满,且没有深入思考任何一道题。
3.我以后代码要自己写,不要对着题解写。这样才能提升自己的代码能力。
4.努力学习算法。说不定这个算法在哪一次考试就考到了
5.积累套路,要做有代表性的题目。
6.计算几何非常差,要加强。数据结构也比较差。
7.在做题时要努力发现性质,大胆猜想,写暴力/证明边写边证明。
8.在有思路后一定要直接实现算法,不要拖延。这也导致我在联赛day2B上失分24/36分
9.自己不擅长做数据结构题。这导致我在几乎全是数据结构的THUWC上没有拿到奖,以后要多做Ynoi。
10.要对基础算法熟练,且要深刻理解。如果我对基础算法熟练,我就能写出联赛day2B的24/36分高分算法,且能做出更多的构造题。
11.做题要深入思考,要从多方面想题。联赛day2A本人没有深入思考,没有发现可以合并2维导致失分16分。
12.本人要多做一些构造算法/非完美算法的题。这样才能让我在一些非典型题中获得更高的分数。
13.对linux系统不熟练。与我对比,dqa2019使用的就是linux系统。我以后要尝试更多的使用linux系统、