SDOI2022 游记
这是我第二次参加省选,也是最后一次。
去年来时,被两天的A打爆了,总分全校垫底,只得了 rk61。
今年走时,两天爆力基本打满,以为没切掉 day2A 要退役了,没想到,被命运送进了队里……
通过去年的sdoi我预计今年也需要拿差不多 300 才能进。但是我觉得我拿 300 很困难……
Day 0
博客搬家。很多题写的题解和想法什么的都没搬完,最后干脆直接搬了写板子过去。复习板子的时候,发现很多板子(LCT,FFT什么的)都已经记不起了,莫名很慌。十点半睡觉翻来覆去睡不着,大概到了十二点才睡着。
Day 1
五点半在睡梦中惊醒。想到这应该是 OI 生涯最后一天了,很难受,但是也必须接受。路上身体一直紧张地发抖。到了lcez初中部,感受了一下氛围,觉得好像也没那么紧张了。最后一战,加油!
6:50
入场试机。开局打了个 \(10^9\) 空循环,发现只需要 \(1.3s\),不得不说这个机子还是蛮快的。
7:10
重启+缺省源码完,发现时间不多了,想测试一下对拍,于是写了个 kosaraju 和 tarjan 的判断强连通分量的对拍。依稀记得csp也是因为这个对拍挂了后来导致耽误了几分钟,C就没写完。
7:25
发密码了,我赶紧写完拍子,一拍……果然挂了。当时心态非常崩,可是也得开始看题了。看到时间限制,觉得很崩。A 的 4s 看起来就不是很签到……
7:50
基本看完了三个题,但是都没有什么思路。第一眼看 B 数据范围以为是什么 Powerful Numbers 的东西,很不理解,觉得 qyc 已经稳了……C是个神秘的字符串题,我尝试推了一下式子,当时不小心把 \(\prod_{i=1}^{n-1}occ(T_i')\) 看成了 \(\sum_{i=1}^{n-1}occ(T_i')\),然后我就考虑每个子串的贡献大概是
就有一个 \(O(n^2)\) 做法了。当然当时没发现多错题/xia
8:10
lpy进来说改时限了,A 改成了 7s,立马往根号算法上想了。
然后粗略估计了一下复杂度,大对大全部预处理出来也只是根号级别,小对小每次直接做就行,难点就在于大对小。想了半天,复杂度都是 \(O(B^2q)\),这实在是怎么平衡复杂度也不行啊……
8:50
写了前 30pts,也就是小对小和大对大的。
9:20
果断弃 A,开始做 B。首先发现了 15pts 送的。
9:35
考虑 \(y=1\) 的情况。发现,我们可以用三进制数位 dp 来解决这个问题,设 \(dp_{i,j,0/1}\) 表示考虑前 \(i\) 位,三进制数位和为 \(j\),是否顶上界的 \(x^i\) 之和,每一次转移就是乘上一个 \(x\) 的几次方即可。
10:00
码完之后跟第二个样例差 \(1\),发现是多算了 \(0\) 的情况……
然后觉得 \(10^{10}\) 很难办,就弃了。
10:20
已经写完了 C 上边说的那个做法,甚至 SAM 都打出来了(中间还写挂了一次),才发现那个式子是 \(\prod\) 不是 \(\sum\),于是重新推式子。想了一个区间 dp 从边上往里走的做法,实现起来也蛮简单。不过 SAM 甚至可以用字符串哈希代替,我觉得这段时间对 SAM 的学习,最后却沦落到跟哈希一个分,觉得很不值得……
11:00
随机……随机有什么性质呢?
11:15
哦!出现次数不为 \(1\) 的串,期望长度非常小!大概只有三四十左右!
那么考虑区间 dp 的话,\(len\) 大的区间就没有意义了,只去考虑 \(len\leq 50\) 的做dp就行了。
11:30
写完了,但是拍不过去……是为什么呢?
11:35
哦!一开始预处理,\(dp[i][50]\) 肯定不能等于 \(1\) 啊!那等于什么呢?
11:40
冷静思考一下,好像是一个组合数!感觉已经没办法冷静下来了,我就在那里疯狂 \(+1,-1\) 试,然后!一个都不对!!
11:45
啊!我组合数的 init 写挂了!
11:50
还是不对,发现可以从爆力里输出一下对应位置的值!
11:55
发现是 \(dp[i][lim]=\binom{n-lim+1}{i-1}\) 终于过了拍子!
抓紧搞了搞文件名交了。
我当时以为 A 大家估计都会做,出考场发现只有 zrz 会做……qyc 神调了一整场寄掉了只打了很少的爆力,需要翻了……苏铁以为 \(1^x=x\) 然后没有打 B 的后 20pts 爆力……zrz 打了 \(140\),orz。
外校神仙好像也没好到哪里去,lcez线段树同学打了80,平邑那边的朋友们好像也不是很高的样子。
我打了 \(30+35+40=105\),感觉三位数好像已经不错了?
Day 2
中午不怎么吃的下去饭,稍微眯了会起来看了看板子。下午很可能就是 oi 生涯的最后一次考试,想起来还蛮唏嘘的,希望能不留遗憾……
14:00
进考场了。发现 day1 的代码竟然也没删,感觉不是很正式的样子(
14:10
想起来我上午的 kosaraju 和 tarjan 对拍还没调出来,马上就发现了一个错,准确的拍上了。也发了下午的包。
怎么只有两个文件夹??怎么有一个文件夹里有 15 个数据??难道是提交答案??不对啊,还有 .ans 呢,难不成是“真-骗分过样例”??有意思了啊有意思了……
14:15
发了密码发现,原来是一道 44 个 subtask 的阴间卡空间题/px
14:20
觉得 day1 那么难了,day2 估计不会更简单吧……
14:40
粗略算了一下 B 的空间,发现 \(O(n)\) 的数组只能开两个/px,即使是裸的树剖感觉也很难做吧,虽然 \(q\leq 5\times 10^4\),唉。
感觉复杂度是什么 \(O(q\sqrt n)\),就是类似树分块的东西。可是我不会树分块……
15:00
先打了 A 最低的 25pts 爆力。
15:20
好像有一个 dp,说的是 \(dp_{u,i,j}\) 表示 \(u\) 的子树,最大权独立集选 \(u\) 的权和为 \(i\),不选 \(u\) 为 \(j\) 的方案数。就是一个树上背包,枚举转移一下可以做到 \(O(n^5k^4)\),常数看起来比较小,我估计可以过 \(n\leq 30\)。
15:45
写完跑了个 \(n\leq 100\) 的竟然也毫无压力??算了,就当拿了 60pts 了。以这个 day1 的难度,day2A 应该不是签到吧……拿 60pts 就跑路吧。
15:50
不知道为啥,可能是因为有点累,也可能是因为中午没怎么吃所以低血糖,手指有点发麻。我当时甚至在想我不会猝死在考场吧,我死了会有人纪念我吗(
16:05
缓了一会,出去上了个 wc,感觉稍微好点了。然后开始开 B,但是我发现了一个重要问题——我并不知道如何看程序用了多少空间!
16:20
先打了前两个 sub,一共 4pts……
16:30
发现,如果我要分 sub 打,那么如果都开数组的话,会不会一起算空间啊……然后我想用 vector
动态开空间,但是又害怕 vector 的空间占用会有一些奇奇怪怪的常数……
16:40
最终还是决定用了 vector
。
17:05
写了分块,感觉没啥问题。后面的部分,即使是没有修改我也完全不会,树分块我完全不知道该怎么分,尤其是空间又限制的这么紧的情况下……
17:20
完全不管 A 了,码单点修改的树剖+BIT,能有几分是几分吧/px
17:50
又开始继续码树剖+线段树,但是卡空间卡的我打起来贼难受。
18:20
最终毫不意外的 WA 掉了第14个样例。我崩掉了。
18:40
最后一直在调树剖,哈哈,真成了oi生涯的笑话。
18:50
结束了,出来之后zrz说他写了 \(O(n^3k^2)\),我发现,原来我那个状态数,有用的只有 \(O(n^2k)\)……,就是 \(|i-j|\leq 5\)。再加上树上背包的那个优化,估计就 \(n^2\) 了吧。那这个签到题是不是人均切啊……
问了qyc,线段树,都切了。zrz 的 \(O(n^3k^2)\) 因为跑不满,很可能也过了……
19:10
原来我并不是运气不好,而是实力不够。到最后,也没什么遗憾了,自愧不如。
回到家整理了一下书籍,准备明天回学校了。whk,你好。
Day 2 +1
早上六点多闹钟响,感觉浑身疲惫。不由自主地,就又多请了一天假。
十二点半才从睡梦中醒来,听说我成了守门员并且一分没挂并且很多人因为挂了很多分退役的事情,我大受震撼……
感谢上帝给我这次机会……真的,我无话可说了。
最终得分 \(30+35+40+60+34+0=199\),没上 \(200\) 有点可惜,但是没挂分是真的没想到。原来 noip 丢掉的运气挂掉的分数,真的在省选考场上,还了我一个奇迹!
我知道大家都在羡慕我的运气,但我想说,运气也是留给有准备的人的。无论我这一次挂分,还是上次noip没有通过随机化骗到那么多分,我也不可能拥有这次的运气创造奇迹。所以,感谢所有人,当然最重要的是感谢自己,在最艰难的时候没有放弃,在最后的时候,没有放弃暴力,没有孤注一掷,没有手残写挂,……
最后,祝各位队爷 noi 取得理想成绩,祝高二没进队的各位同志whk顺利,祝高一和初中的学弟们明年省选都能取得一个满意的结果!祝大家身体健康!
最后的最后,我还是想说那句话:此生无悔入sd,想不到——今生还能学oi!