SDOI2019一轮,我名存实亡,虽然形式上没有退役,但是实质上是退役记。
Day –x
记不得是省选前几天了,反正是省选前的一个周之内。
然后当时莫名遭了一口毒奶,某天晚上睡觉,梦见全机房都省选200+,就我不到一百分。被安排了啊QAQ。感觉很不妙。
Day0
坐火车来到了济南,今年一轮是在山师大附中考。和凯爷住一间。晚上敲了很多板子,写了LCT、费用流、高斯消元,好像还有一个板子,但是忘了是什么了。然后在空间里给各种小伙伴点赞,还和lunch大佬相互鼓励了一番。睡得不是很晚。
Day1
上午六点半起床,感觉有点没睡醒。早饭日常大考前不想多吃。抽考场抽到了三考场,座号是考场的1号。
8点开始考试,考到12点半,时间是四个半小时。
上来先读了一遍三个题,第一眼看上去都不是特别会,感觉要凉,特别是T3怎么还没有题面啊?
先看T1,感觉要是按照去年联考的难度,我Day1 T1还是应该能做出来的。然后上来看错了两遍题意,一开始没看到要求分成k段,以外可以分成任意多段,开始去想斜率优化。看到之后又看错了,以外是区间不能相交,然后还去写了一波,然后发现过不了大样例,比大样例小了好多。再仔细一看题意,是所有可能的区间。于是就开始暴力,枚举所有区间,然后排个序,选前k大的,于是就有了60分。想了想正解,觉得应该是要按位搞,但是没有太好的思路,决定先打其他题的暴力。此时的时间是九点。
感觉虽然我联考的Day1 T1没想出来,但是T2要是能多拿分或者A掉也行嘛。于是开始想。一开始看到字符串就开始想各种可能的字符串算法有没有可能用的上,特别是SA、SAM和AC自动机。然后发现暴力应该是要根据支配关系和前缀关系建出一个图来,表示na集合中的点有点权,权值是串长,然后求的是图上的最长链。这个是一个暴力,求前缀关系的时候可以用哈希优化一下。但是这显然没法通过。由于我T1没有想出正解,自然要想办法在T2多得分,毕竟刚才那样的暴力只有10分。
然后就考虑刚才说的那三种数据结构,我不太擅长SA,于是尽可能去尝试SAM,我发现SAM是我唯一知道怎么用它来找子串的字符串算法,这还得益于写了去年的制胡窜那个题,从而学会了子串定位。虽然我一开始有点忘了怎么子串定位了,但是想了一下还是想起来了。我们的想法是对反串建SAM,这样子串定位之后所有B串定位后的位置的parent树的子树内出现的每一个A串都可以以B为一个前缀。这也是建反串的SAM的原因,正着的话是子树里的A有B这样一个后缀,反过来建才是要求的前缀关系。这样的话,既然是要往parent树的子树里的所有na里的串都连边,那么我们就考虑利用parent树这个结构来优化建图。我们很自然的想到应该用parent树的父节点向子节点连边。这样我们nb里的串向定位后的节点连边,定位后的节点na里的串表示的节点连边。这样的节点数是O(n)级别的,也就是na+nb+SAM节点数。然后我就开始写了,写了将近300行,结果过不了样例,调了半天,能过了小样例的前两组数据了。然而过不了第三组,输出+手画了一下SAM的结构,发现会连出来环,然后发现之前的建图方法建出的图有环不一定都能构造出无穷长的串。接下来就一直在修改这个问题,又想了写了好几个版本,都是不对的。时间几乎都花在这个题上了。当时脑子也有点乱。考试快结束的时候,我意识到问题出在了SAM上的一个节点表示的可能是endpos集合相同的长度不同的若干个串,然后开始有点慌,感觉自己的想法会不会不太对啊。害怕自己这题爆零,于是赶快去写了个哈希的暴力,结果发现也没好写太多,写了两百行,又调了一会儿,终于过了前两个样例。此时时间已经不多了,去看T3。
T3看了一眼真的有点懵,没有题面是什么情况啊?于是开始看下发的数据,发现在有码长限制,于是打表的话一个点都过不了。然后没有看出什么所以然来,就弃了。
犹豫了一下去想T1还是T2,感觉T2已经写了那么长了,不如继续做T2。但是最后还是没有调出来QAQ。交题之前发现T2数组开小了,赶紧加大了一波。
抱着一点别人也可能没考好的侥幸心理出了考场,发现全机房都会T1,认识的大佬们也几乎都会做T1,就我不会,当时就感觉自闭了。
中午吃完饭我冷静了一下,发现只要我对于SAM上的每个点开一个vector,然后按照长度排个序,按照长度顺序连边,就是对的。似乎我考场上以为这个排序复杂度是假的,实际是不会炸的。然后心态有点崩了。
下午听讲评,发现T1确实可做,T2的做法和我想的不太一样,不知道我的想法对不对。与ckw交流了一下,发现他思路和我几乎一样,然后他A了这个题,然后当场几乎崩溃,然后交流中还发现,由于这个题的前80分都有一个串长的关系,于是可能不会出现让我出错的情况,也就是说我交那个考场上的代码可能能过80,当场就有点要气炸了。
然后出成绩之后发现全省前十几乎都是机房里的人,自己T2的暴力还挂掉了。最后只有T1的60分,考得比去年一轮更惨,竟然在Day1爆零了两个题!
心态崩了。
下午晚上一直很难受,但是还是要强制让自己冷静下来,因为还有明天,不说翻盘,起码明天不能再挂了,不求超常,起码正常发挥吧。Day1的分数在全省100多名了,要是Day2再发挥失常的话,真的就过不了一轮了啊!
做好了Day2可能是退役前最后一场OI比赛的心理准备,虽然Day1打挂了,但是还想进二轮,就不敢用一些很极端的策略,还是求稳为主。
Day2
调整了一下心态,感觉心态还算可以了。
上来先看T1,是个计数,不是很会啊。一开始想了记录c0,c1,d0,d1的四维状态的dp,就算可以滚动数组优化掉i,但是复杂度更是n*m4的。想了一会儿发现其实记一个前缀和的话,c0和c1只需要记录一个,d0和d1也只需要记一个,这样就有一个n*m2的状态了,是可以过50-60的。于是开始写,然而可能还是有些细节没想好,一直在错。大约九点半左右,感觉这样下去时间分配要出问题,强制停止了调试,去写了个20分的暴搜。调了一会儿暴搜过掉了小样例,打算去看T2。此时是10点。
T2一上来感觉有点不会搞,想了几种贪心或者乱搞都被自己叉掉了,后来想了一种感觉比较靠谱的贪心。由于样例都不是很大,于是手玩了一下,发现都是对的。于是开始写。写了好几个版本都有问题,最后终于找到了一个版本能过掉所有样例,然后链的我也会。这样有75分了。我要让简单的暴力分一定要拿到,于是打算先不想正解了,而是去想T3。
T3没有多少思路,就会一个暴力,以为是k*2n*n2的,结果发现是(2n)k的,只有8分,但是8分也是分,于是这8分写了我150行。此时大约是11点20。
接下来的时间打算继续写T1的50分,结果还是写了半天无果。最后又检查了一下写的各种东西,发现T3忘写文件了,庆幸自己幸亏检查了一下。
出考场感觉一般,虽然不算好,但是起码比昨天好一点,期望得分也有100分左右。结果刚出考场就发现自己T2链的情况写错了,然后有点崩。
吃完饭退完房有点晚,去听讲评的时候已经讲到了最不可做的T3了。
等了一会儿测评,发现自己又炸了!!!T2炸成了15分,尽管思路是对的,但是又写错了!!!然后心态爆炸,喜提全省110多名,两天都爆炸,综上我一轮退役了。
除了我之外Day1发挥不是很好的大多都翻盘了。wucstdio、zyb、北爷、yzx都发挥的不错。
最后说一下感受吧。我在火车上写下了这篇回忆录,真的是心里特别难受。高二的一轮打得竟然比高一时还差。一轮的两天过后,我和同校同学的分差已经大到了一个几乎不可能翻盘的地步了。前途渺茫呐,甚至都不知道自己到底能不能过一轮,也不知道自己到底会不会被就此劝退,强制结束OI生涯。虽然说Day1晚上做好了Day2是我退役前的最后一场OI比赛的心理准备,但是真的挂得这么惨之后我还是有点茫然。在比赛当场想出Day1T2的SAM我不知道是该高兴还是遗憾。两天的完挂让我确实很难受,感觉没有发挥出自己的水平。本来的话160+103虽然也不高,但是起码还是一个可以接受的成绩,但是现在这样,60+43确实让我不知措施,甚至就算进了二轮都只剩下理论可能性了。
我是真的很热爱OI,能不退役我当然是不想退役的。如果我还没有OI退役,那么我打算换一种活的方式,我打算在OI生涯的末期,尝试一下拼尽全力到底是怎么感觉。我已经做好吃苦的心理准备了,无数次说着对自己狠一点,却终究没有真正的狠下心过。虽然可能一个月的时间对我来说不可能改变局面,可能确实无济于事了,但是这种体验一定很畅快,而且我未来也一定会去打ACM的,怎么说也不算吃亏。
本篇暂时到此吧,不知道会不会有更新。
Update:
终究还是没有那么拼命,但是我还是比较努力地学完了最后一个月,过得也很开心,很享受最后的时光。感觉也算不上遗憾了吧。