CTT2020 游记

Day 1

先通读一遍题面,发现T1和我看过的某个清华集训题以及LNR Round1的某个题目有点类似,T2是某个不知难度的数据结构题,T3是一道交互题。

观察了T3的交互库代码风格之后,我猜测T3是之前在杭二一起训练的某位选手出的,于是打算先放掉T3,把时间平均分配给T1和T2。

借助那几个类似的模型,我猜测了一些结论,发现问题的难点在于把 \(2\) 进制的线性基推广到 \(k\) 进制。花了大概半个小时,我大概想出了 \(k\)进制线性基的处理方法。又花了半个多小时实现了我的算法。

编译,提交,获得了 18 分的好成绩。

我试图给我的算法找反例,却始终找不到反例。为了不耗死在这一题上面,我果断决定跳出这一题,先看下一题。

做 T2 的过程出奇的顺利。我迅速把一个 10 分 subtask的李超线段树做法推广到了一般情况,然后花了大概半个小时实现了它。提交却被卡常卡成30分。又花了一段时间造极限数据,找时间瓶颈,并优化它。在大约10:15的时候,我通过了第二题。

为了谨慎起见,我把T1的几个结论重新推了一遍,清除了想出假算法的顾虑,可以安下心来调试这题了。我先把代码通读了几遍,查出了几个小错误,又重构了之前写的比较混乱的一个部分。再提交,仍然不是满分。最后只好通过多次提交和assert找出可能犯错的点。

在11:20的时候,我才发现我exgcd的时候先将两个数除以了gcd,却忘了乘回去了。改了这一个错后立马就过了。

此时时间不多了,我决定rush T3的一个 \(10\) 分暴力。在11:45的时候,T3拿了 \(10\) 分。

最终得分: \(100 + 100 + 10\)

Day 2

看完三题后,我立马想出了T1的正解,可是T2和T3暂时都没有思路。在8:45的时候立马过了T1。接下来我需要在T2和T3中抉择。T2想了半个小时却只会一个需要1.5小时实现的25分左右的算法,而T3的暴力分就远比25分多。于是我决定先攻T3。

想到 CF Div1 的某个题,我发现竞赛图的强连通分量个数其实之和每个点的入度有关。用这个结论,可以把暴力的\(O(n^4)\)算法优化到\(O(n^3)\)。另一个思路是先把问题转换成强连通竞赛图的问题。

仍然沿用入度序列的方法,我不知道如何把\(O(n^3)\)优化到\(O(n^2)\)。于是只能从强连通竞赛图的性质入手。过了一会,想到了哈密顿回路的性质,把问题转换成了如何求哈密顿回路。回忆了当初见到了哈密顿回路的证明,我想到了一个极其难写,细节非常多的求法。

所幸时间还多,我决定放掉T2全力攻此题了。在一个多小时过后,我总算用160多行写完了这个做法,并且过了样例。提交上去却获得了 \(0\) 分的成绩。

稳妥起见,我决定先摆脱 \(0\) 分。于是用我之前没有成功的入度序列的想法拿了 \(60\) 分,并且拿这 \(60\) 分的代码与 \(0\) 分代码对拍。

拍出了3、4个错之后,我才把这题过了。此时已经快11:50了,这意味着我几乎没有时间做T2了。挣扎着推T2 \(n = 2\) 时的答案,却没有推出来。

最终得分: \(100 + 0 + 100\)

Day 3

今天看完三题后,感觉每一道题都不是很简单,尤其是T2,T3都是我经常失手的数据结构题。先看T1,在半个小时之后发现了解决此题的关键,原来是用行列式去刻画逆序对的奇偶性。经过简单的构造,我得出了此题的算法,并通过了此题。

粗略地思考了后两题,我发现T3是个不太需要推导结论的数据结构题,而T2的结论推导就有很大一部分的分数了,于是决定先做T2。

冷静分析后,我发现T2的操作可以转换成:每次让排列里面的某个数向右“越过恰好”两个比它小的数,问能否给它排序。

“相邻交换”这个操作,考虑的量往往是排在某个数 \(i\) 后面的比它小的数的个数\(s_i\)(以及这一类和逆序对有关的组合量)。因此这道题的不变量理应是 \(s_i\) 的奇偶性。很快我从两方面论证了我的结论的正确性,并获得了 \(60\) 分的成绩。

接着我转战T3。在一番磕磕盼盼之后(其中包括看错了一次部分分),我拿到了 T3 的 \(20\) 分。

此时我感觉T3我可能只有 \(20\) 分的得分空间了,T2却有 \(40\) 分。我说服自己不要恋战,还是把重心放在T2上。

我幸运地想出了T2的一个kd-tree的做法,并着手实现。可时间已经不多了,只剩一个小时左右了,我加快了步伐。可也许是实现的非常匆忙的缘故,我到最后还是没有调出来实现的错误,还是没有拿到剩余的 \(40\) 分。

最终得分:\(100 + 60 + 20\)

Day 4

今天看完这三道题,发现T1是个比较常规的,步骤比较多的计数题。看T2,发现T2经过matrix-tree这一步的转换过后,就是一个我在联测中见过的循环方阵det的结论了。而T3是个很奇怪的图论构造题。

由于实现T2基本不花费时间,我决定先写T1,再攻T3。在大概一个小时写完T1的状压dp部分、集合幂级数exp部分和最后的fmt部分之后,我发现我的代码只通过了图没有重边自环的subtask。于是我开始从重边的情况找错,却没有找到。情急之下,我写了一份暴力来对拍,最终找出了错误,通过了此题。

然后是做T3。T3的前几个subtask并不难做,都是我见过的很熟悉的构造。而最关键的一个子问题所占的分数其实非常大。经过了大概一个小时的思考,我凭借着数竞上学的一些技巧方法想出来了这个构造,得到了 \(70\) 分。

T2和T3的高分代码都出奇的好写。很快写完了T2和T3,拿到了 \(270\) 分。

最后一段时间,思考T3的最后一个 \(30\) 分的subtask无果。我决定无脑地试出最后一个subtask的构造,却没有试出来。最后几分钟,决定把之前的构造直接用来做最后一个subtask,竟然多拿了 \(1\) 分。

最终得分: \(100 + 100 + 71\)

很快听说我竟然考到了 rk2,我不知道这值不值得欣喜。客观的说,这次比赛T2的区分点不在思维推导而在于见没见过某个冷门结论,T3 这样的题也本不应在严谨的 OI 比赛中出现。这份卷子并不适合选出IOI国家队,却恰好撞上了我擅长的点。我只能希望让自己的表现对得起这份幸运。

后记

我知道,wcz 和 gyr 在 Day2 和 Day3 都考的不错,尤其是 wcz 的 Day2 和 Day3 都比我高。可是他们却没有在 Day1 和 Day4 发挥出他们应有的水平。希望他们能够找出自己的不足,在之后的比赛中发挥得更加稳定一些。

我也知道,zbw 的前三场比赛都没有发挥出他的最高水平,离前 \(30\) 差了一点。不过这也让他之后会有时间调整自己的生活方式,找到最适合自己的价值观。

可是我不知道自己的水平究竟是 NOI2019 的 rk47,还是 NOI2020 的 rk36,还是这次考出的不太真实的 rk7,抑或是 WC 考出的某个rk。但这似乎已经不重要了,在 Day1-4 的考试中全心调试代码,奋战到最后一刻才是我存在于此的证明。不知道WC Day2 的 13:00,双手离开键盘,回忆在这四天的考试,会是怎样的感受?

posted @ 2020-12-12 21:32  unzcjouhi  阅读(973)  评论(0编辑  收藏  举报