感觉具体内容可能是随便扯,本来我自己肯定不会写这种东西但是学校要求没办法。反正快退役了就丢上来得了。

Day 1

先阅读一遍题面,感觉 T1 比较可做,T2 看着非常难做,T3 看着怎么长得和 APIO T3 蛋糕 这么像,不过题面非常长,最后还有一个很奇怪的算分函数,感觉可以放到后面做。先做 T1,做了一会会了一个 O(n^2 k) 的做法,感觉能拿很多分甚至冲过去,于是就直接写了,在 pretest 上获得了 92。这个时候有感觉正解是 O(nmk) 的了,但研究了一下发现我的代码不太好优化,于是尝试卡常,但卡了比较久都没能拿到更多的分数,这个时候已经过了 2.5h 了,就决定丢掉 T1 先做后面的。

还是先看 T2,这个题面看上去和期望、图论都有关,感受上直接做非常难,不过经过了一些手玩和分析后还是大概理解了一些结论的轮廓,然而这个时候我还并不是很会直接刻画出结论,看看暴力分发现可能能拿 20 - 40,感觉并不是很够,不过剩下的时间并不多,继续冲这个我没什么感觉的题可能也不太对,于是我决定先在 T3 上拿一些分,再把最后的时间都用来做 T2 或给 T1 卡常。

阅读完 T3 很长的题面之后,我立刻写出了签到分,通过了第一个 Subtask,按照 蛋糕 的经验,将代码粘贴到第 2、3 个 Subtask 之后获得了 16 分,不过这些分数肯定所有人都会。于是我尝试做 Subtask 2,不过并没有什么好的想法,反而还感受出了对着质因数做的思路并没有什么未来。不过在经过了一些思考后,我还是注意到了如果我们对我们询问的数的 gcd 做出比较有效的区分,则可能会有比较好的效果这一点。因为我当时是对着 Subtask 2 做的,于是构造出了类似 2 * 4 3 * 5 4*6 ... 这样的东西,测试后,我意外地发现这种做法有 36 分。我又对着 Subtask 3 简单调了一下参,竟然直接就获得了 56 分,接下来我又尝试进行精细的改变,不过都没有奏效。

此时距离比赛结束还有 1.5h,我继续返回做 T2,首先拟合大样例写了 25 分,接着尝试写链的部分分,不过它挂掉了,我的比赛的最后的时间在尝试卡 T1 的常与调 T2 中度过,不过都没什么进展。

出场后感觉爆了,我的 T1 和 T2 显然都只有不高的分数,T3 我看起来也并没有做出什么很厉害的观察,可能只是大众分。不过经过一些交流后,我发现虽然很多人都在 T2 中取得了很高的分数,不过 T3 达到我的分数的人却非常少,因此最后我的得分还算可以接受。

查分,发现自己 T2 fst 了 5 分,并且竟然是数据范围最小的第一个测试点,经过调试后,我发现这是因为我在 T2 的小数据上进行了拟合大样例与手算来输出结果,其中分为多种情况,一种情况我在编写完代码后意识到了,就对几个数据范围比较大的测试点的代码进行了更改,不过却没有改最数据范围最小的那个测试点的判断。而那个测试点对应着两种情况,pretest 正好是我能对的那种情况而 system test 却不是。因为我漏判的情况在不同的测试点上的形式相似但不完全相同,所以我不好说能否程式性地保证一定全部判断正确,只能说以后还是要多检查,尤其是不要只看复杂度的而忽略了更简单的情况。

Day 2

因为我 Day 1 的分数不太低也不太高,所以我的期望是 Day 2 能做出 T1 并拼一些暴力,或者在分数上达到接近的结果。

开题,还是阅读一遍题面,感觉 T1 看着就是我不会的题,不过或许努努力是能做出来的,T2 看上去就是我不做不了的数据结构,T3 看上去就是我做不了的计数题。简单判断之后,我发现我可能只能在 T2 T3 上获得暴力分了,于是必须要用 T1 决定一切了。

于是开始做 T1。最开始我感觉没有一点头绪,不过做了一会突然有了一个很简单的结论,我感觉很奇怪,看上去一个普及组难度的结论和 NOI D2T1 完全沾不上边,不过我也找不出反例,于是就实现了一下,交到 selfeval 上发现果然获得了 O 分,研究后发现是,依照 k 的奇偶性分类,最终的序列形态会与我的结论有 1 或 2 的位置差别。我尝试对着这个位置差别进行讨论,不过发现很难分析。我转而去看暴力分,但发现暴力分全都不好做也没有什么启发性,唯一与我的做法相关的就只有一档 k 是偶数的部分分,但只有 5 分。这是什么意思呢?我明明认为做法与 k 的奇偶性强相关的,但部分分却告诉我和 k 的大小很有关系,这使我搞不明白了,难道我从最开始就错了?

对正解没有头绪的我转而开始去拼暴力,不过我却发现直接进行暴力只有 ~20 分的完全不可接受的分数。没有关键的结论 / 观察就只能有 eps 分吗,这也太神秘了。不过我也没什么办法,只能慢慢一档一档想怎么做。在 2h 多的时候,我在尝试优化复杂度的时候才发现,可以通过二分的方式将序列的值域转成 0 / 1,在经过一些分析之后,我得到了一个可能可以获得 50 分的做法,这离正解是在差得太远,但我也只有它这一种选择,然而在经过了长久的调试和卡常之后,我却只在 pretest 上有 40 分,并且我的做法仍然不能在 k 很小的时候奏效,因为复杂度中关于 n 的项就已经非常大了。最终,我只能为了不完全弃疗而去打 T2 和 T3 的暴力,同时因为我对 T2 所用到的 prufer 序列没什么了解,只能现推结论,T3 的暴力也并不算好写。最终,这花费了我 >1h 的时间。在最后的不到一小时内,我尝试再对 T1 投入一些思考,但我也并没有想明白什么。

出场后就知道真的爆了。实际上也是真的爆了。全世界人类都通过了 T1,银牌线来到了 380 - 400,与我的分数差不多就是差了 T1 剩下的分。

赛后,我发现,如果将我开场得到的分析和 2h 时的二分结合起来,就能把 T1 转化成一个更简单的问题,在进行分类讨论后即可通过这道题,因为数据的原因,即便分类讨论有一些问题也仍然有很高的分数。同时,我也学习了 k 比较小的做法,大概是,猜这个时候段数不会很多,以此缩小 dp 状态,其在正解中的用处是,k 较小的时候分讨可能会错,于是要拼上相应的暴力。或许我在赛时冷静一下,将前前后后的分析结合起来还是有希望通过这道题的,加上 T1 的 60 分我的分数正好比银牌线高 2 分,不过如果我做 T1 了可能就没时间写 T2 的暴力了,所以最后打铜可能也算是结果正确。不过我确实很不喜欢这个 T1,部分分对我来说并没有做到引导正解的作用,反而是让我对我的思路产生了质疑。如果套路地写一个暴力并尝试优化真的只能有一点点分,对于占了很多分数的 k 较小的部分分,首先它们对正解毫无提示与启发(因为我不可能在分析完之前想到分析会在 k 小时错),最终的猜结论的做法也有些无趣。赛后来看,这个题确实被很多人都通过 / 拿到高分了,但也确实被少数很牛甚至 IOI 金牌的选手认为很难,可能我确实是做不明白这种题的人吧。不过他既然已经出现了我也没什么办法,只能在提升实力的同时祈祷以后不要出现这种部分分比较怪异甚至是有误导性,最终做法也不是很漂亮的题吧。

Something Else

我觉得我是有分析出 D1T2 题目性质的能力的,感觉这个是比较传统的工作。其实 D1T3 在思路上也是传统的,马后炮的说我在这两道题上都需要具备拿到很高的分数的能力。

D2T1 我其实做出了重要的分析,不过时间上割裂地比较大,这道题可能我也不是那么没救,不过距离完全在能力范围内还有距离。

D2T2 对前置知识的了解应当具备,剩下的分数很难取得。