CTS & APIO 2019 游记

写在前面

算是省选后的第一轮大考。

去年因为某些原因并没有参加 CTSC 以及 APIO,还是有些遗憾,所以希望今年能有所收获。

也希望今年的 CTS 能延续去年的出题风格,这样我还能苟一两个题。

然而事实证明我还是太 naive 了。

5.13 (CTS Day 1)

日常延时 5 分钟开考。

发现竟然开了-std=c++11!简直好评。

看完三个题发现都不会,瞬间就自闭了。

先玩了一会 T1 发现无果,感觉我推出了一堆奇奇怪怪的玩意儿,硬要写也很难写,而且得分似乎也不太乐观,于是无奈先扔了去看 T2。

看完 T2 感觉有很多想法。先想出了一个 \(O(Dn^3)\) 的 dp,写了一下过了样例,于是继续想优化。用生成函数推了一下发现是算这么一坨东西:

\[n! \sum_\limits{k = 0}^{n - 2m} \left(\sum_\limits{i = 0}^{+\infty} \frac{x^{2i + 1}}{(2i + 1)!}\right)^k\left(\sum_\limits{i = 0}^{+\infty} \frac{x^{2i}}{(2i)!}\right)^{D - k} [x^n] \]

于是我并没有再往下推......

于是我就写了一个 \(O(n^2 \log n)\) 的多项式做法。

看了下数据范围发现 \(n, D \leq 100\) 的部分之后居然直接就是 \(n, D \leq 4000\) 的部分,抱着试一试的心态跑了一下 \(n, D \leq 4000\) 的数据发现要 12 秒,于是又自闭了。不过我还是存着侥幸心理交了这个做法,因为我的复杂度与 \(n - 2m\) 有关,所以如果 \(m\) 相对较大的话,还是能过一点数据的。

这时候已经过了很长时间。开 T3 之前心想应该慢慢来搞提答,于是就先跑回去把 T1 的暴力打了。

看完 T3 没什么思路。想了一下感觉这个题 \(\rm type = 1\) 的部分似乎可以先通过随机化来确定安放顺序,再找个贪心的安放方法,最后再执行多次取最优解。于是先敲了一个乱搞来解决 \(\rm type = 1\) 的点。发现第一个测试点中 \(n\) 很小,于是执行次数大概设了个 \(10^4\)。令人惊喜地是,竟然直接跑出了第一个点的 \(10\) 分答案。这时感觉这种做法似乎挺靠谱,于是直接拿这份程序去跑第三个测试点,跑出了 \(9\) 分的答案。把执行次数改到了 \(10^5\) 后,也轻松跑出了 \(10\) 分的答案。之后通过一系列的调参以及修改随机方法后,在除了第五个测试点之外的测试点上都拿到了一定的分数。

对于 \(\rm type = 2\) 的部分,并没有想到太好的专门的做法。于是把 \(\rm type = 1\) 的部分的代码粘过来改了一下,令人又一次惊喜的是,竟然也直接跑出了第二个点的 \(10\) 分答案。于是我准备也通过调参来跑后面的测试点。然而事情并没有我想的那么顺利,在 \(\rm type = 2\) 的部分上,我并没有拿到太多的得分。

搞了一个多小时后,每个点的得分为:

测试点 1 2 3 4 5 6 7 8 9 10
得分 10 10 10 6 0 9 1 6 7 2

最后实在来不及搞出更高的得分了。于是检查了一下之前的两道题。在跑 T1 暴力的 \(n = m = 2, l = 3\) 的数据时,发现竟然不能很快跑出结果。瞬间慌得一逼,于是赶快把暴搜改成了打表。至于表对不对,不得而知。

考完感觉今天的得分不高。有点失望。

下午出分发现 T1 果然挂了,T2 也并没有搞到预期之外的分数,于是最后的得分为 0+36+61=97。发现许多人 T2 得分很高,后面才得知光从 \(n\) 个变量的角度考虑的 \(O(n^2)\) dp 很傻逼。此时我的心情和省选第一天考完极其相似,十分难受。不过今天毕竟已经考完,只能希望明天考好一点。

5.14 (CTS Day 2)

日常延时 5 分钟开考。

看完三个题发现还是都不会,不过 T1 是个似乎可做的计算几何,于是准备把重心放在 T1 上。

首先想了一个 \(O(3^n)\) 的状压 dp。之后感觉可以把所有的线段按某种顺序排序后做区间 dp,但很快就发现这显然是假的,于是瞬间没了思路。这时候想到了一种贪心,即把每条线段先看成单独的凸包,然后通过不断合并凸包取更优值,直到不能再合并为止。然而发现第三个样例就能叉掉这种做法。不过,把这种做法反过来,即先把所有线段看成在同一个凸包内,再贪心地去分裂凸包,倒是能通过所有小样例。于是敲了一份这种做法,过了前三个样例。我怀着试一试的心态,跑了一下第四个样例,发现需要花 4 秒多一点的时间,并且输出从第二位开始就和答案不一样。

我准备先通过小数据拍一下这种贪心的问题。于是先把状压 dp 写了,然而发现过小的数据并不能拍出问题,而能拍出问题的大数据又无法可视化,我瞬间不知如何是好。

这时我想先开后面的题,但我又并不想就此扔掉 T1,于是决定再手玩一下,又过了一会儿,终于玩出了能卡的情况。想了一下发现解决这种情况似乎只需要再套上最开始的想法,即对分裂后的每个凸包再拆成单条的线段,然后做一次贪心合并,之后两种情况再迭代进行即可。我认为这很有可能就是导致我无法通过第四个样例的原因。很快码完之后,之前拍出问题的数据得到了正确的答案。我满怀憧憬地再跑了一下第四个样例,然而——我竟然还是得到了和之前一模一样的错误答案。

这时我真的自闭了。玩了三个多小时的 T1 最后依然得到了错误的结果,此时的我几近绝望。

不过由于之前拍出问题的数据通过这种做法得到了正确答案,我认为这种做法还是应该能骗点分。于是我决定分段写,小数据状压,剩余的数据就跑贪心。

写完 T1 后剩余的时间不多了。看完 T2 感觉似乎能想个复杂度三方的做法。然而因为要求是环,要同时考虑前后的匹配情况,于是越想越复杂,最后甚至还叉掉了自己的做法。于是又只好打了个暴搜。打完暴搜甚至又卡了卡常才能保证过第一个点。

看完 T3 发现 \(O(3^n)\) 枚举还需要套一个状压 dp 才能做,于是我连暴力都不会打,瞬间又自闭了。

就这样,我又一次抱着失望出了考场。在不写挂的情况下,今天的保底分是 30+10,我只能期待 T1 有一些额外的分数。

下午出分,还好 T2 的 10 分并没有挂,T1 竟然神奇地得了 65 分。于是最后的得分为 65+10+0=75。然而发现许多人过了 T3,还有许多人 T2 也搞到了不错的分数。于是心里还是很难受,果然还是技不如人,甘拜下风。

所以两天一共四个 998244353 是什么操作啊?

5.15

颁奖日。

似乎运气还可以,拿这破分竟然苟了个银牌,心情算是稍微放松了一点吧。

不过看着大屏幕上一页页的获奖名单,感慨万千,同时也始终有一种无法描述的奇怪感受回荡在心头。

计数太难了。

5.18 (APIO Day 1)

偷个懒吧......

没想出 bridges,没开 device,最后想到 lamps 的正确做法然而没时间写了。

我还花了好久才过了 device 的一个 5 分的 \(B = 1\) 的 subtask......

大众切了 device,总分 203,就我没有。自闭了。

考场上 bridges 一直在想询问分块+重构树的做法,然而后面发现把重构树改成离线就是傻逼题了。更自闭了。

5.19

颁奖日。

没写出 device 就显然只能拿个铜牌滚了。

后记

虽然最初抱着玩一玩的心态报了 CTS 和 APIO,不过很好的是又表露出了自己一些新的问题。希望自己能吸取这两次考试,尤其是 APIO 的教训,在马上要到来的夏令营以及最终的 NOI 上能够有更好的发挥。

posted @ 2019-05-13 08:11  ImagineC  阅读(1020)  评论(4编辑  收藏  举报