挑战每两句话就破防一次。

· · 生活·游记

开始 30min T1 读错题,一直以为 v_i = i 的子树高,是固定的,导致我 30min 都处于懵逼状态。算了很久读了很久都没发现问题。

一直以为 T1 题出错了。但是过了这么久都没人反馈,说明我需要调整一下脑子,于是去看别的题去了。

T2 T3 看了一遍,认为 T3 是不可能拿到 12 分以上的分的,而 T2 是一个很有搞头的题。

于是开始 T2,显然的想法就是从后往前 dp,然后记录一些东西用于维护有多少个当前点为左端点的字典序小于 S 的串。于是不难想到维护目前这个串与 S 哪个后缀有最长公共前缀,感觉像是一个 SAM 还是什么,但是不重要。

于是开始写,但是发现需要把目前字符串的长度记录到状态里面,我算了一下,如果要记录这个东西,我和暴力分就没有什么区别,于是干脆赌一手这是对的。

写了 2h 后发现很多样例过了。但是具体测的时候发现有一个特殊性质的一个测试点挂了,长度比预期的长。只能说明我的是错的。

如果我继续写这道题目,我可能仍然做不出来,而如果把状态记下来,对于特殊性质而言,自动机状态是很小的,说不定能写过。

最后想了一想,认为我应该先把 T3 的暴力写了再来看 T1。

我在想 T2 T3 加起来有 80 多分,T1 既然是签到,做出来不就进队了。所以我开始重新思考 T1。

现在是 2.5h。T1 画了很久的图才发现 v_i 其实就是不固定的,所以我们需要树形 DP,但一直以来我对树形 DP,尤其是背包一类的都不熟练,所以推了许久,才勉强有了一个 n^3 的做法,具体是求解出每一个点的重链长度为 x 的概率,后续是好做的。

就这个东西推了 1.5h。中途还有 2h 的时候差点在考场上崩溃了。现在还有 1.5h,我想这个背包总是可以能优化的吧。

当我优化到最后的时候,发现这个东西是卷积,安心地死去了。

果然高兴后的痛苦更痛苦。

测了倒数第二个样例,跑了多少忘了,但是能跑这一说。

现在只有 40min。我意识到自己再无翻身可能,果断放弃了“保 T1 争 T2 的想法”,只能重新回到 T2,把一些分拿稳妥。

但不知道为什么,就这 45 分总是拿不明白,不管怎么写都会莫名其妙 WA 掉,答案长度还比原本的假算长一大截。

写着写着,突然就收到了只有 5min 的提示,更急了。

于是没办法,只好把自己原版本的代码找出来,但是找出来发现不对,只好把现在的版本一点一点改回去。

谁知道我当时手速多快,最后 3min 的时候,把 freopen 糊了上去,然后编译跑了一下样例,UB 都没测,随后重启。坐在座位上不知道思考些什么,只感觉一阵耳鸣。

考完不想说啥,但最终还是说了,问了分。最后总结发现自己在特别运气特别强的情况下能得到 166,但运气如果差到离谱的话只会有 54。同年级最高分好像是 140,NOIP 比我多 25 左右。

唉唉没办法。

后来得知只要 T1 我记录第一个和最后一个非 0 数字就能得到可能会更好的算法,原本在考场上想到的缺一分治也因为时间不够没有敢写。这是真完蛋,只能怪自己树上背包一直都是半懂不懂的状态。而 T2 只需要把我写的改成 bitset 就可以了。这是真没办法。

下午不知道在干啥。晚上没打 AT 担心又破防,于是去写 whk 作业。

20min,交互、构造、DS。

汲取了昨天的教训,决定思考 T1 怎么做。

看了看 checker,幽默 n^3。手动改成 n^2。

那 checker 还是 n^2 的。我并没有过多在意真实 checker 的实现,我认为我只是不会高级数据结构罢了。

0 的位置是可以二分找的,然后 1 的位置随后也能确定,发现这是一段区间,找数字的过程就是区间不断扩大的过程,还不赖。写了 1.5h 后发现操作数量是 2n,而 AC 性质是可以简单优化到小于等于 n 的。

但我并不知道后续是什么。瓶颈在于每一次扩展区间都要检查数字在左边还是右边。

尝试了多种办法思考,我认为这是无法被优化的东西,算下来大概是 70 分。如果要过题,我只能换做法。但无论如何,我必须在后两道题目拼出来 50 分才能有翻身可能。

我怀着忐忑的心情去思考 T2,我并没有任何想法。随后发现了一个惊人的事实,我会 0 分。只要暂时放下 T2。

T3 是一道数据结构题,即使这是我的弱项,但我也只能尝试拿到尽可能多的分数。

对于前面的 8 分分类讨论就行了。随后我发现我可以将这个东西刻画成括号序列,这样剩下的 16 分也是可以拿到的。而真正困难的地方在于 n<=10^5,我尝试离线下来换根,但是我发现更加困难的地方就是要维护排名,而要维护这一点,我只能写平衡树。

树在随机的情况下是根号高度的,而我还要写一个平衡树,比较的时间复杂度也不知道是多少,当然我是不敢写的。

但不知不觉,时间只剩下了 1.6h。我坐立难安,此时摆在面前的只有三种选择,重新思考 T1; T2 尝试拿分; T3 尝试 r=2。

我决定先尝试 T3 的 r=2。只需要维护最值和次值,但是需要换根,只好使用 set 来维护。随后我的电脑就差点因为 MLE 而重启。

这意味着我只能在 T3 获得 24 分。此时我真的很希望哪怕多的那么 1 分。哪怕也就 1 分,翻盘的机会就会多 1 分。然而当我把这 1 分看的多重要一分,就会更加绝望十分。

经过短暂的平复,我只好尝试 T2——那 16 分是多么诱人,看上去多么简单。但加以思考,只能陷入无尽的深渊,在幻想的 2^n 和现实的 2^{C(n,n/2)} 中不断徘徊。

我几乎疯了。我发现 k 居然能取到 2,于是我干脆写了一个 k=2。

只剩下了 1h。我已经改变不了什么了,唯一能做的,就是 T1 再来碰碰运气。

我尝试在每一次对前缀数字存在性提问后对于整个区间的求解进行优化,我发现在某种情况下,两者是可以互相推导的,在经过不断的调试后,我优化到了 1.5n。

我长呼一口气,就像是完成了一个无比艰巨的任务,但经过计算,我发现我多得到了 3 分。一看时间只剩下 10min,我只好放弃这一切,去检查那堆砌而成的 T3 代码。随后坐在座位上不知道想些什么。

但我随后得知了一个既是希望也是绝望的的消息——延时 15 分钟。我必须在这 15 分钟继续完成我的 T1。

我已经神志不清了,决定用仅存的理智和斗志完成这道题目,哪怕什么都没有——最终,在最后的 5min,我做到了。自己搓的数据过了。

我怀着激动的心情去测试大样例,WA 了。

发现我搓的是 B 性质的数据。

想似的心都有了,但我只能含泪将我写的代码版本回退,并无脑地把两个代码拼起来。

终于不用整天为这个东西提心吊胆了。

指标到校 & 中考 rp++