2020省选记

Posted by wyj on June 18, 2020

我的最后一次省选了。高一时写的省选记回顾:(Round 2Round 1)。

Day -1

觉得这多半会是我人生中的最后一天OI训练了,据说是信心赛,然而貌似这个信心只有高一的大佬们收到了:他们全部理论AK,我却不会。

下午首先是准备会。xyx告诉了我们一点人生的经验。然后大家都回家了,机房里就只剩下几个人。我开了一局以撒,夏娃,白嫖成功了,最后获得了白猫头硫磺火。觉得 rp--

晚自习的时候机房里就只有我一个人了。后来来了hlh和dwh,结果hlh被老师发现了(我猜是他的班主任?),并且被严厉地批评了一顿。此老师貌似不太会组织语言,把几句话翻来覆去地重复了20分钟以上。并且其认为hlh和保送爷们“不是一个等级的”,“走路时都该低着头绕过去”,进行了人身攻击,甚至让他“快滚”,我看着都觉得这个sb真的不配为人师表。然而转念一想,这肯定就是我将来的命运,比我想象中地狱一般的高三还要可怕。我真的不想过上这种猪狗不如的生活!!!!凭什么只有集训队才配像个正常人一样活着?????想着想着我就哭了一整节晚自习。

Day 0

上午和高二的其他人一起学习了一下实验考试。洋葱表皮细胞质壁分离是真的难。由于用时远远超乎我的预料,就在学校里吃午饭了。午饭前后zc围观我通关了一局该隐,罕见的天使局。

下午去了南京。这次的酒店真的很豪华,然而住起来并不舒服。找半天找不到台灯的开关;椅子不能靠着后背,因为一靠就会倒下去,彻底翻车。我试图把椅子换成沙发,然而沙发太矮了,完全用不了电脑。只好把沙发挡在椅背之后,防止我往后靠时落马。

去试机。据说这次的NOI Linux开启了硬件虚拟化,然而我觉得还是很卡。写了.bashrc.inputrc.vimrc、gedit的片段和外部工具,魔改版主题,就像之前每次试机时我做的那样。发现自己已经几乎忘了gedit的编译运行怎么写的了。并且貌似只有我一台电脑的Fn键是全部坏掉的,完全不能使用F9F11,我实在没办法,只好使用QtCreator风格的Ctrl+BCtrl+R。后来了解到snz等人的键盘也是有问题的,心理稍微平衡了点。

我写了个“max卷积”测试虚拟机的速度。用此(而不是FFT)测速的来源是WC中指令集的介绍。在虚拟机里开了-O2而不是O3)的情况下,$n=10^5$,两种写法都需要3.1s左右的时间。相比之下,我自己的笔记本只需要0.8s。所以说,这个虚拟机速度基本上正常。

晚上开了局Forgotten,全程魂形态打,过了超级撒旦。颓废结束之后复盘了一下近期的训练,看了下错误总结,祈祷自己不要FST。

Day 1

早上继续很困。

先写了15分钟的各种配置。一开题,乍一看T1,怎么还有个这么奇怪的排序方法,看起来像是个不可做的贪心题,我就直接去看T2了。T2,纯数学题?一看就相当可做。然而我最开始把$F(k)$看成了$F(x)$,我就不会做了。领悟了正确的题意之后发现这是个sb题。半小时看题+写完+过大样例。

然后我回头去看T1,才发现那个排序完全没有卵用,随便怎么排答案都一样。一看数据范围,$2\times 10^6$;又一看,没有O2!!!!!!!!!我瞬间知道了这绝对是个究极卡常题。然而此时我还是只会两个log的二分+线段树。后来仔细想了想,发现可以线段树上二分,就直接开始码了。此时我心里想:这就是省选吗,怕不是一个小时就进队了?于是我怀疑起自己来。此时又看到了内存限制,才发现动态开点会MLE,只好写离散化(记住这句话)。题面里还有什么“立刻回答”,简直是在搞笑的。

于是线段树上二分很快就码完了。测了下样例,随便过了。测了下大样例,随便过了。写了个对拍,随便过了。我相当高兴。然而测满数据时我心态就崩了:开了O2还要6s。果然是究极卡常题啊,真的毒瘤。一个log的题为什么要开两百万还没有O2????

于是后面几个小时的时间我都在卡常了。我把读入改成快读,线段树改成zkw,每次询问从在线段树上跑三次改成跑两次,并且每次改完都要重新对拍查错。不知不觉的比赛已经快结束了,可是我开了O2本机还要3.7s。我心态彻底崩了。想起去年Day 1的“字符串问题”那个题,我当时也是整场比赛都在卡那一道题的常数,那题我写的是两个log活该被卡,然而这题被卡常就没有天理了啊!!!!

然后我弃疗了。尝试T3。只有$0/1$的那一档分,我写了个假的最小割,大样例输出$26$。此时觉得实在是不得不写暴力了,否则还要更惨。然而我计算了一下暴力的复杂度:$\binom{10}{5}\times 5^{10}$,复杂度都爆int了,第一档分都别想过。只好写了个自我感觉没分的乱搞,就真的弃疗了。

期望最坏得分$60+100+0=160$,最优得分$100+100+15=215$。

出考场之后发现大家都200+。我又自闭了。这次是真的肯定要退役了。然而高二除了我和snz之外没有人过T2是真的出乎了我的意料。然后和大家交流了一下T1写法的细节,发现只有离散化这一项我可能比较劣:我用了lower_bound来离散化,而不是把编号带进去排序。想起来曾经snz的这个写法还是跟我学的,就更加后悔了。下载了自己的程序,本机不开O2要2.9s,把lower_bound改成排序就只要2.2s了。亏爆了!万一我退役失败,以后就算打死我也不敢再用lower_bound离散化了。

晚上在洛谷上测了一下T2的民间数据,AC了。吃晚饭时我猜测了一下T3的标算,当时觉得像是保序回归,现在一看可能还真是。

Day 2

还是写了15分钟的配置。这次的虚拟机有点奇怪,最小化的窗口在下方的Window list中是纯白色的,整个下方的Panel还全都是透明的。不懂是为什么。

按照昨天的经验,我直接先开了T2。看到T2我的第一眼感觉是:这不是我前几天刚刚判定为“不可做”的换根长链剖分吗?第二眼:原来是子树查询啊,不是暴力长剖就结束了吗?第三眼:原来还有个$v_i$啊,瞬间不会做了。然后我往“用线段树区间加,一边dfs一边维护当前点到所有点距离”的思路方面想了一会儿,发现这就是区间$\pm 1$查询区间异或,完了啊,大家都会这个,除了我,又被区分出去了。

后来又换了个思路,发现暴力$01\ Trie$合并就直接可以维护了。根据之前srf的AGC044C解法,全局$+1$就是交换下左右子树再递归下去。这个东西很好写,我花了半个小时就写完+调完+对拍过满数据了。然而由于之前傻了,想算法的时间花的有点久。唯一的细节在于,这个题的$n$居然超过了我一般习惯性开的数组大小$2^{19}$,还只超过了一点点,所以测满数据压根就不能暴露这个问题。幸亏我会-fsanitize=address,不然可能要爆零了。

然后我看了下T1,完全不会,于是去开了T3。出乎我意料的是,这个T3我居然一眼就看出来了一个多项式做法!想起之前xyx说的什么“D2T3拿40分就上天了”之类的话,瞬间觉得自己稳了。然而一看数据范围,$w\le1.5\times 10^5$,时间复杂度上天了。果然我还是太naive了。还好,有70分的部分分,我毛想想,暴力跑矩阵树应该可以用脚过这70分。就开始写了。写完之后我一测,发现所有数都相同的情况我T飞了,要跑20s。发现自己的理论复杂度实际上还是上天的。我一开始写了个特判,对于全相同的情况只做$m+1$次矩阵树,然而如果边权只有两种我还是要T飞。此时我想到一个乱搞:把所有本质相同的树放到一起做,就可以不用特判了。现在得分就变成了一个玄学的东西,至少边权只有两种的话我就肯定不会T了。

然后我去写T1。吸取昨天T3的教训,我不再妄想拿到什么高于暴力的分数。然而我还是不死心,码了几个状压和贪心,全是假的。发现我状压之后就完全不能做了,因为状压的状态里没法维护对应关系。所以只好写了个$O(m!m^2)$的暴力。还有一个小时,现在我有两个选择:写T3的正解,或者是T1剩下的分数。可惜我没想到维护多项式这种东西(寒假里2月8日训练的T3是我和ys合作才做出来的,只有二维插值的那一部分是我想出来的,矩阵树里面套多项式是ys的点子,我没有独立想出来整道题的能力),只会用求逆矩阵和伴随矩阵的传统做法维护行列式的修改。然而原矩阵肯定不是满秩的,所以我就不会了。可惜我没有仔细看候选队论文,所以回天乏术。

只好开始乱搞T1。写了个爬山,每次试着交换排列中的两个位置使得答案变得最小。发现随机初始状态比我贪心出来的初始状态强多了,我果然是贪心菜鸡啊。可惜时限只有2s,我大样例本机爬了1分半钟才爬出来最优解。肯定没什么分了。

出考场发现自己又被吊打了,大家全部AK了,就只有我不会T1。拆贡献果然是我这辈子都学不会的东西。高一的全部成为人生赢家。发现自己完全没有脑子。很可能要退役了。

晚上疯狂尝试卡掉我的T3多一个$m$的做法。我最后构造出来能够让我跑到最慢的数据是下载链接,我花了1.6s,snz花了1s。多半是可以过题的吧?所以猜测期望得分$30+100+100=230$。


出成绩了,发现我被疯狂吊锤了。所有民间数据我Day2 T1都爬山爬出了不错的分数,然而官方数据卡掉了我的爬山,一分没有。Day2 T3我算一次行列式求了$O(n^2)$次逆元,所以被卡了20分。然而还是退役失败了。