HNOI2017 游记
如果你要问我为什么现在才发出来,那是因为我太懒了
Day0:
日常看板子……不想写题,嘴巴了几道题之后也不想写……
到了晚上颓起来了……回想了一下似乎也没有立什么flag,那就愉快地颓吧……深感技术下滑严重
Day1:
考前还是很紧张的,不知道为什么一到大考前就觉得自己这也不会那也不会。看了很多板子(虽然最后也没有用上)。
Day1开始也不知道出了什么问题,总之就是题目打不开,加紧给我们印刷了纸质版……于是就多了40min的打板子时间。然后这40min我就一直在写FFT……最后就是一直到开考了还没有调出来。当时我就想HNOI应该不会有FFT吧(flag)。
开考看了下三道题,感觉今年的画风不太对。感觉T1很可做的样子。记得老师一再强调要先写暴力,那就先写暴力吧。接着发现T3似乎有个70分的暴力也不难,$O(n^2)$算一算然后解个不等式就直接出答案了。
接下来就开始写T1。一开始想简单了,以为每次旋转其它所有点的深度都会加,这样的话就只需要一个全局标记了……后来才发现旋转的点的子树深度是不变的。花了点时间改过来。写完后拍出了几个错误,之后就和暴力拍上了。此时看了下时间,过去了2h左右。
接下来花了1h左右写T3,试了各种办法,比如把平方拆了,猜有单调性什么的……但是并没有意识到我暴力算的那玩意儿就是一个点积,可以FFT加速。最后分数还是70分。
接下来的时间我就一直在刚T2。总觉得这道题和去年的序列很像……但是想了很久都不会低于$O(n^2)$的做法。看了下还有一个部分分,感觉并没有什么用的样子……然后突然发现,这个部分分可以把$p_1$ 拆成两个$p_2$来算,那么就是HNOI2016的序列了,并且还是简化版……
然后……HNOI2016序列怎么写来着?
花了点时间回忆起了莫队做法,但是线段树做法想不起来了……20W的范围莫队有点虚,最后还是硬着头皮写了……然后发现极限数据6s,就开始了紧张刺激的卡常数,最后卡到了2.0s,刚好就是时限,不知道有分没……
一直等到了5点终于出数据了,开心地发现我三道题都没挂,T2写的60分还卡过去了,真是让人感动。仔细看了一下T2那30分的数据,发现刚好没到极限,于是我就刚好跑过去了……感觉100+60+70=230似乎是个比较高的分数?
晚上和我爸散完步回到家,发现UOJ群里已经出成绩了……点开一看,就被吓到了。TM怎么这么多上200分的啊!我联赛考砸这是要完的节奏啊!今年省选标准分这么高还让不让联赛考砸的人活了啊!
Day2:
今天比昨天还紧张……大概是因为Day1考得比较好,让我有了冲省队的欲望吧。
今天题目没有出问题了,顺利打开了题面。看了一下题目,T2居然是个计算几何,T1感觉是个dp但是C的范围有$10^{18}$感觉没法做啊……T3似乎就是用组合数算算?那么70分还是很好写的吧……(下考场就被告知我T1看错数据范围了)
然后就开始写暴力。第一题暴力很好写,写完之后加个记忆化还可以多20分。感觉空间有点虚,一测空间居然真TM爆掉了……然后发现我数组开的是int,实际上只要bool就可以了……成功压下空间。
跳过T2先开始写T3。突然发现这个模数怎么那么鬼畜……感觉70分拿不到了啊……似乎需要CRT?但是我不会算模数为$p^k$的组合数啊……
然后我就发现我傻逼了。模数的质因子只有2和5,那么预处理阶乘的时候把2和5全部除掉,剩下的部分求逆就可以了。输出不想写特判,就转成高精度输出吧。
写出来测了一发9组相同的极限数据,发现输出怎么不一样?然后就发现了多次输出高精度数组没清空……恰好我暴力用的是同一个print函数,所以拍不出来……好险……
接着就发现被卡常了,于是又开始了刺激的卡常数……逆元改成递推求,2和5的幂次预处理……最后卡到了10组0.2s。想着这70分应该是稳了。
想了一会儿T3正解无果,就开始写T2的暴力。然后发现T2真TM难写。射线和线段判交怎么写啊!最后我强行把射线和线段都转成直线,然后直线求完交再来判交点是否既在线段上又在射线上……我还是用解析式算的……接着我又不会判点是否在射线上……最后就是大力特判,分类讨论……庆幸最后没有挂,我过了样例就没管了。
最后的时间一直在刚T3,因为觉得暴力分多的题肯定正解容易些(像昨天的T3一样)。然后推了1h左右的式子无果,就开始找规律。然后就发现答案似乎是杨辉三角某一行的前缀和?仔细看了下发现答案是$\sum_{i=0}^{a-1}\binom{a+b}{i}$,拍了一下似乎很对,但是似乎要算$O(b)$个组合数?
又过了一段时间,突然想起来组合数是对称的,所以我们可以算出前$\frac{a+b}{2}$个组合数的和,这样接下来就只要算$O(a-b)$个组合数了……非常开心,然后发现……我不会算这个模数下的组合数……
仔细想了想,这个模数也不是质数,分解之后还是$p^k$的形式……似乎有人讲过模数是$p^k$形式的组合数怎么算?但是我已经忘记了……试图现场推出但是失败了……接着我就欺骗自己正解绝对不是这个东西(flag)
接着找到了一个神奇的数列,可以用这个数列来算答案。前几项分别是$1,2,5,14,41$,然后我居然没看出来这是斯特林数,也没有再往后算一项,还以为是乘3减1。开开心心写了一个矩乘,拍Wa了就没交上去。
由于一直到12:58我都还在写矩乘,最后的检查比较匆忙,所以也很怕出现程序交错,文件名打错之类的低级错误……
过了不知道多久,终于出分数了……老师告诉我今天140。那么又是一分没挂?虽然我写的大多都是暴力分,但是省选一题不挂也不容易了。今天40+30+70=140,感觉似乎要进队了?也许可以卡进前13?
接着就是紧张的统分环节……统完分之后听说省队线300分左右?心里默默加上我的联赛分数算了一下,感觉似乎……真的要进队了啊!
最后的结果就是某个联赛考砸的家伙省选翻盘,成功进队。
这之后,竞赛也展现出了残酷的一面——有人留下来,就得有人离去。省选出成绩的那一刹那,心里不只是喜悦,还有一股忧伤——因为意识到要失去一些Friends了。竞赛就是如此残酷,我们能做的,就是尽力做到最好。无论省选如何,未来的路还很长,大家一起加油!