概述
写在前面
算是省选后的第一轮大考。
去年因为某些原因并没有参加 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)^kleft(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 上能够有更好的发挥。
转载于:https://www.cnblogs.com/ImagineC/p/10854702.html
最后
以上就是机智铅笔为你收集整理的CTS & APIO 2019 游记的全部内容,希望文章能够帮你解决CTS & APIO 2019 游记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复