zoukankan      html  css  js  c++  java
  • 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,双手离开键盘,回忆在这四天的考试,会是怎样的感受?

  • 相关阅读:
    Java Web
    Tomcat学习笔记
    Java Web学习笔记(2)
    Java Web学习笔记(1)
    2017-2018-1 Java演绎法 小组会议及交互汇总
    【Alpha版本】冲刺阶段
    【Alpha版本】冲刺阶段
    【Alpha版本】冲刺阶段
    【Alpha版本】冲刺阶段
    【Alpha版本】冲刺阶段
  • 原文地址:https://www.cnblogs.com/mathematician/p/14126822.html
Copyright © 2011-2022 走看看