ZJOI2020游记

草自己好像写了4K流水账,有点浪费读者时间啊.

赛前心态挺平和的.
主要是觉得去年像联赛那样自己吓自己挺不值的(现在还是觉得自我惊吓导致Day2在不会T2证明的情况下优先选择补证明而不去卡常太愚蠢了,到手的AK就这么没了…).
就考两天试也没啥必要把自己折腾得死去活来,不如吃好睡好.
虽然最后也没吃好,因为9:00~14:00的考试时间太反人类了.
心态平和的另外一个原因是,听说我手上的NOI2019 Ag好像在强基计划里还是有用的.

Day1

开场看到个string,莫名兴奋.
按照传统先看T2,发现T2名字叫传统艺能,又是个线段树上搞一搞的题.
回忆了一下之前几年的线段树题的做法,顿时有种出题组没题出了的错觉.
一看部分分,好像比去年常数一卡就是60分的垃圾出题组高明多了(悲伤的事情是听说还是有人因为这题的常数原因退队了).
之后看T1,是个字符串+DS,80分暴力似乎挺一眼的.
接着看T3,一股浓浓的ATC风格扑面而来,稍微想了想好像30分好像挺显然的.
之后回去想了想T1,感觉可以将所有runs建trie然后区间本质不同子串计数,ZJOI就这难度? 不过有点难写(而且实际上这是个假算法).
于是先去写T2了.写完发现大样例要跑7s,回想了一下去年的卡常经历,把矩乘全部展开就只用2s多了.
还真就传统艺能(指出矩乘题必定配合完全展开)?.
把T1的runs部分写完后,觉得可以利用等差数列去掉LCT.
写完调了调发现过不了样例,搭了个拍发现算法假了了了…
好像直接原地修锅的话,可以把问题转成求每个本原串最大重复次数的的奇偶性.
主要是贡献里面有个除二下取整,直接求和的话应该还是好弄的.
抢救到11:30还是没成功,心态有点崩了,因为手上还是只有一个T2.
冷静了一下觉得应该先想一下T3的50.
看着题面突然想到noip2018D1T1的三行做法—答案等于相邻两数差的绝对值之和的一半(虽然那题我场上写的是笛卡尔树做法).
然后想到一个 O(ai)O(\prod a_i)O(∏ai​) 的做法,就是枚举每个位置有多少的值是由策略1干掉的,然后可以用noip2018D1T1的做法计算代价.
稍微前缀和优化一下就可以得到三方做法了,这时大概是11:50.
然后回去补了T2的 O(nnlogn)O(n\sqrt n \log n)O(nn​logn) 做法,就是利用每个位置的本原平方串数量只有 logn\log nlogn 个的特点,然后直接莫队维护每个本原平方串的最大重复次数.
感觉这个做法挺蠢的,按照去年的经验也不太能有分.但是不写这个的话我还得写一堆暴力.
写完发现随机数据要2s,噫我稳了.然后发现斐波那契串要12s,草.
好像去掉莫队也要3s(时限也是3s),md那q=1的分都不一定有,突然想问候出题人.但我自己出题有时候也是这个风格,这叫罪有应得?
回去把T3的50写了,回来补了个T1的q=1,这时是13:12,我应该60+100+50=210还是有的,估计能进队了.
但是毕竟还剩40多分钟,挣扎着卡了卡T1的常,想把vector换成离线基排,还想嵌个完美串数量不超过1e6的暴力进去,写到一点三十几觉得写不完就弃疗回去检查了.
出来听说有人看到"传统艺能"以为是反语就没开T2(悲伤的故事…).
还听说真有人搞出了T3大于50,感觉非常厉害.

Day2

早上听说Day1标准分250,所以我的根号log跑过去了???
开场因为试题分发问题咕到9:10.
打开题先看T2,看到最小时间的期望下意识的min-max容斥,然后以为 aia_iai​ 不是两两不同的,死活不会做.
再仔细看了眼题发现保证 aia_iai​ 两两不同,但还是不会做.
看了眼T1和T3,感觉T1应该先写个暴搜找规律,T3是个CTF?
回去接着刚T2,中途推出来个多项式复合(那写个m^2复合就能有70?)
再想了想发现题意可以转成求出,染黑i个球,且没有连续k个球被染黑的方案数.
显然可以 O(m2)O(m^2)O(m2),稍微推了推式子发现还可以 O(m2k)O(\frac{m^2}{k})O(km2​),那我能有80?
然后还想推100,发现不会.写完 O(m2)O(m^2)O(m2) 就10:50了.
然后去搞T3,想到已知 a1,c1,a2,c2a_1,c_1,a_2,c_2a1​,c1​,a2​,c2​ 的情况下,枚举 b1b_1b1​ 可以直接算出 b2b_2b2​,然后检查一下 b2b_2b2​ 的值是否在合法范围内.那再写个BSGS就可以根号log了?
写完随了组数据发现1e11要4s,再随了几组数据发现1e11要1.5s,1e12要10s+.
那我又常数杀没分了?
T2对拍关掉1e11就能跑进1s了.
输出了一下快速乘次数发现比预想的多得多,冷静了一下我的复杂度好像还要加上 O(err2p)O(\frac{err^2}{p})O(perr2​).
那它放几个 p=1e15,err=1e11p=1e15,err=1e11p=1e15,err=1e11 的点我就没了?这时快12:00了,赶紧跑路看T1.
瞪了半天还是不会暴力,自闭到13:00写了个链(由于某些原因考试13:25结束…).
回去看T2,发现会了个 nk3lognnk^3\log nnk3logn的算法,大概就是每个元素是多项式的矩乘,但感觉没分.
O(n2k)O(\frac{n^2}{k})O(kn2​) 补完后觉得可以直接倍增就能把log不乘在k^3上.
但由于时间已经所剩无几了,就回去补了个T1的环,还剩3min的时候发现S包含1号点的情况写挂了(但改完后好像T1还是爆零了嘤嘤嘤).
出来听说$E自称没上200(一副切了T3的样子,我直接吓傻了),supy 130.
感觉省队应该还是有的.
出分后本博客可能还会继续更新.

upd:
最后好像Day1 100+100+50,Day2 0+80+30,总排第2.
省选开始前对自己的预期是稳住省队然后争取冲个A队,彼时北大集训的阴影尚挥之未去.
在CSP排名基础上前进1名也不是没想过,但觉得还是有点虚无缥缈.
尽管最后离$E只差二试的15分暴力(也就个T1的链+T2的k=5?),但我觉得我无论是实力还是心态都确实配不上队长.
最拿个rk2感觉也挺好的.

稍微补充下第一遍写这篇游记时漏掉的细节和想法吧.

Day1开局心态是非常好的,可能自以为数据结构或者字符串水平还是不低,然后上来一个string.
至于T3这种ATC向的题,我对自己的评价是做也能做,但没什么优势.
当时的想法就是在拿下第二题的同时尽量切掉第一题以拉大和其它人差距,至于第三题,如果搞完第一题还有时间可以看一下.
后来的事大家也知道.
T3确实非常难,全省大于50就两人,一个90一个100.
以自己的实力不做T3可能是正确的选择.
只是这个T1,大家也看到了我中场的时候心态是有点崩的,那个时候才意识到这道题好像比预想的难一些.
然后就深深地感受到自己的菜,之前对自己DS/字符串水平的自信也有些崩塌.
可是我又能怎么办呢?当时的决策是认怂补暴力+写莫队,毕竟苟住省队远比维持虚假的自信更重要.
而且按照往期经验字符串题的数据都挺难造的,而且它还不捆绑测试.这意味着想把我的复杂度卡满的同时还卡掉其它暴力是非常困难的,另外评测机还可能比本机快.
另外一个值得记录的一个事是,最后40min+我搞T1的时候,其实一直是没有把80分暴力补满的.
因为前面提到了,除掉莫队的预处理部分就要3s了.
如果想要得到优美串不超过 10610^6106 的部分分我就必须大改,或者直接把莫队拆了写80分暴力还是有希望跑进3s的.
在到底是莽100还是苟80之间犹豫了好一会,等到终于意识到自己再不动键盘写点什么就将一事无成的时候已经来不及了.
考试的最后20min一直是被巨大的无力感笼罩的,当时唯一做的事就是挣扎着调了下莫队的块大小并且发现没什么效果.
当时想要是大家都80pts并且我60pts那不是血亏.可是我又能有什么办法呢?
虽然按照经验210应该不会退队,但是省选开始前的那种自信(或者应该叫自大)还是无可挽回消失了,就感觉一刹那间又回到了初三或者高一那些苟且偷生的日子里.
出来后听群友说T1根号显然,又有点后悔场上没有试着去log,但在巨大压力的情况下也很难做得更好了.

Day2开始后是有点略微心慌的,因为往期能带给我自信的DS这场一题也没有(虽然好像本来我对DS的自信在昨天就已经消失了).
那就尽力而为吧,至少T2是计数而不是更加不擅长的考点.
又看完T1和T3后觉得今天尽量往35+(70/100)+40上写,能写到应该就稳了.
T2推着推着觉得不在自己水平范围内,拿到70pts后觉得继续推下去最多也就多30,而T1或T3暴力没写可是至少丢30.
至于T2额外的k=2000的10分么,回想了一下JOISC2020D3的经历,觉得要是为了这个10分导致T1T3暴力没写完也挺亏的,就先放在那里了.
T3暴力写完后才发现本能有40的算法好像只能喜提20.
之后一路丢盔弃甲(T2晾了10,T3晾了20在那里)地打开T1,按照自己的做题习惯都是先写个正确的指数暴力,然后以此为基础(无论是加以优化还是仅仅作为对拍)慢慢往后写.
然后就盯这第4到9个点,在(看下一个测试点)-(我会了)-(我假了)之间反复循环.
中途稍微想了想树,感觉可以DP但是没想清楚,而且还只有额外的5分(假如我有链的分的话)
等到12:50的时候,突然发现 n=12,li=0n=12,l_i=0n=12,li​=0 可以优于 3123^{12}312,状态数大概是 i=04(9i)(9ii)\sum_{i=0}^{4}\binom{9}{i}\binom{9-i}{i}∑i=04​(i9​)(i9−i​).
这个时候大概才终于意识到,今天tm是10分暴力大战(指每一次作业的得分单位是10),那我前期为了不存在的30分暴力煞费苦心干嘛.
可是只剩90min-了.
写了个T1的链就回去看T2,正如前面所说大概会了k=5.
这个时候感觉要被暴力老哥锤烂了,起码我现在会20(?)+90+40(?)但根本写不完,而且这个期望得分里还有很多是不去试一下就不知道有没有的分(诸如T1的暴搜或者T3的卡常/乱搞).
最后出场的时候只写了(0/10)+80+(20/30),被教练告知应该够进队了.

总得来说这两天省选还是打得非常惊险刺激的,尽管最后结果看上去还不错,可是这中间的历程,我觉得远比纸面上的分数来的坎坷.
OI一直都是一个残酷的游戏.所谓的"稳",对我来说一直都是可望不可即的海市蜃楼罢了.
还是怀着一颗敬畏的心去面对吧.

上一篇:P6631 [ZJOI2020] 序列 解题报告


下一篇:(Python)字母频率统计