百度之星 2022 & CTT 2022 翻盘记
Day -10 (2022.11.26)
人在杭州,刚下动车,我拖着笨重的行李箱在杭州东站穿梭。做了落地检,拿到绿卡后飞奔出站,我们的网约车司机已经等了不少时间。还好最后我们跑赢了一小时黄码。
怎么晚饭又是老娘舅,离谱。想起了 NOI 前隔离时被老娘舅支配的恐惧。
上楼试机碰到了 hzy 和 ljc,和他们聊了一会。
晚上不想洗衣服,摆了。
Day -9 (2022.11.27)
快进到宣读比赛规则。各场景下有字典的无损压缩,竟然是通信题。
第一题要读 UTF-8,使用 fread 和 fwrite 非常方便。先敲了一个非常蠢的方法试了试手。
字典肯定有很大用处,一个很显然的想法是用字典存储所有出现次数较多的串。试了一下找到所有出现次数较多的长度为 \(3\) 的子串,发现表现不错。但接下来几个小时就卡住了,没有什么新突破。
中午试了一下 SAM + 不定长度,稍微有点难写,怎么表现还不如压三位,无语了。稍微修一修,压了点长度,然后坐牢到比赛结束。最后总榜 rank28,喜提椰树牌。问了下 csy 怎么做,他说也是这么做,合着调参大赛了是吧!
晚宴抽奖抽中一个词典笔,就离谱。
晚上不得不洗了点衣服,不然脏衣服就要堆成山了。
Day -8 (2022.11.28)
早上没啥事,复习一遍 Codeforces Round #745 (Div. 1)。
中午十二点之前退房,但是衣服还没干,所以我用吹风机吹得稍微干一些再装进袋子里。转移到 CCF 指定酒店的时候雨下得特别大,坐在车里雨点打到车窗玻璃上跟下冰雹似的。
到酒店后工作人员说我们被安排到只有一张床的套房?离谱。不管了先住进去再说。房间还是蛮大的,风景也不错,很舒适,只可惜明天就要换走了,今天先睡沙发。
本来打算干活,结果摸了一下午鱼,从舍友那里得知了一个新的 IO 游戏 starblast.io,看上去蛮好玩的。
吃晚饭的时候碰见了 ntf wcz 和 gyc,csy 的舍友竟然是 zxy。还看到了 yny 和 gyr ?
VP 上一场 Codeforces Global Round 24,D 卡了一会,E 卡了一会,F \(n ^ 3\) 过了,离谱。G 好难,最终 perf 只有 2770 左右。
VP 结束后到跑步机房锻炼,碰到了 SH xzy。终于遇到锻炼老哥了,感动。
晚上洗掉了所有脏衣服,感觉良好。
Day -7 (2022.11.29)
昨天晚上写游记写到很晚,今天睡到九点,差点没早饭吃了。只能说睡沙发的感觉还行,就是被子容易掉。
十点钟左右健康码黄了,昨天核酸做太早了。没办法,只能和 rsy pyf 还有另外一位吉林老哥去黄码检测点做核酸。本来以为没下雨,结果来回一趟加上排队总共在雨里淋了一小时/发怒。
午饭后从套房搬进了标间,难过,有种由奢入俭难的感受。
下午补了 CGR 24 的 G3,感觉其实,我不好说,没做出来挺可惜的。H 理解了题解,但是看起来其他人写的都不是题解做法。所以先摆了,有时间向 jiangly 请教一下他的做法。晚上写了 A~G3 的题解。
晚饭一般,忘了吃啥。
写完题解大概八点,去健身房跑步,又碰到了 SH xzy。回宿舍洗澡洗衣服,搞搞弄弄到了九点四十,和同学线上聊了一会儿天就睡觉了。
Day -6 (2022.11.30)
早上六点二十的闹钟,醒的不是很彻底,还有点困。抹黑换了衣服(舍友还在睡觉)下楼吃早饭,一个人都没有,感觉良好(怎么这么卷?)。
上午把之前 VP 的 ARC152 的 E 补掉了。挺厉害的一道题,被 gyh 16min 切掉,太空步了。学习了一下 B,C 猜的结论是怎么证明的,写了 A~E 的题解。
中午得知出题不算 0.76,你在逗我吗?被迫打下午互测。午饭时我和 ljc 交流了一下,他说他觉得他的题有希望冲击 max downvote,不太好说,让我看了就知道了。真的,我当时真的以为他只是在开玩笑。
晚开了一分钟互测,发现 ljc 的题已经 -10,这时候我才意识到事情的严重性。额,T1 太长不看,T3 什么高考数学,看来看去还是 T2 最可做。直接贪交上去 0 分,写个暴力猜出结论,换种贪心方法就行了。结果我写倍增被卡常了/问号脸?一开始以为是 IO 问题,但是怎么改都不过。刚打算写树剖,交换了一下倍增数组两维就卡过去了/问号脸?1e6 倍增 1s TLE,看来卡车丢失的威力比我想象中更大。手玩 T3,显然要将翻折和旋转看成线性变换,但是两个套起来就不太会了。看样子 0.16 无望了。结果 itst 忽然说这场送我们 0.76,好家伙,那还打个屁啊!
互测摆了,和 jgh lxr zzh 在七楼大厅打掼蛋,我和 zzh 被压着打,他们打到 A 我们还一场没赢过。结果他们三把 A 没过,一夜回到解放前。笑死,我和 zzh 只赢了一局,然而最后他们打 2,我们打 3。
发现互测 100 分还是有前 20 的,也就是说就算不送 0.76 我也有 0.76。但其实大家都 100 分很有可能是因为得知送分之后都摆了。
晚饭后和 ycx csy 打了几盘 richup。最后一盘,我和 bot 交易,用可以集齐国家的地换了 bot 1000 刀,csy 见状开始搞事,把自己的地全部给了 bot。最后我利用 bot 会花很大代价买下一个国家的特性,用美国把 bot 的钱全抢了过来,bot 踩中英国一波去世。
晚上点了份零食外卖,以弥补接下来若干天单调的饮食。下楼拿外卖时天上还飘着雪。在宾馆里面活动觉得没啥,没想到宾馆外面这么冷。
摆烂,没去锻炼,也没洗澡和洗衣服,因为没出汗。
Day -5 (2022.12.1)
不知不觉就十二月了啊,我的 OI 生涯还有多久呢?
屋顶上堆着积雪,今年的初雪来得格外早。冬天到了。
舍友早上起来发现自己 huawei challenge rank 47,卡到八点还是 rank 47,痛失 air buds,有点没绷住。
吃过早饭回来学多项式,学了一上午。要说收获其实也没啥,就是补充多项式相关博客。忽然看向窗外,好家伙,好狂暴的雪。雪下着下着就变成了雨,雨下着下着就变成了雪。
单调的雨雪,阴沉的天空,压抑的情绪。
下午继续学多项式,补了一下 CTT 游记。到宾馆外面转了圈,感受冬天。又到大厅转了圈,碰到 tzc 偷卷。
回到房间补了 Pinely Round 1 (Div. 1 + Div. 2) A ~ E 的题解,明天补 F2 和 G。
补着补着就到了晚饭时间,饭后和同学打了很长时间 richup,就到了八点。
刷知乎又刷了半个小时,才磨磨唧唧到健身房锻炼。在健身房碰到了两个不知道是什么学校的同学,其中之一穿着看到过好几次了的蓝色校服。
跑半个小时,回房间到了查房点。水半小时群,又随机点开几个网页刷了刷,一个小时过去了。我怎么这么会浪费时间啊!
经过一个洗澡时间的悔恨之后,我决定从明天开始每天养成一个习惯,首先就是不刷手机/奋斗。
Day -4 (2022.12.2)
早上七点起床,因为昨天晚上睡的晚了点所以今天并没有起很早。以后要六点起床了/奋斗。
吃早饭坐电梯时碰到了 zxy,想和他打个招呼,但是电梯里人有点多。今天晚上去 csy 房间玩玩。
上午写闲话,写到一半保洁阿姨进来打扫卫生。观摩了一下,学到很多,以后在家做家务时效率 up up。她套被子的速度好快,时间就是金钱啊!
写完闲话就到午饭点了,吃个午饭写日记,写完日记睡一会午觉,健康生活。
一整个下午都用来思考 F1 了,黑红蜜蜂的题目着实恐怖。
晚饭很难吃。
晚上和同学继续 richup,到八点半下楼锻炼。
看室友打了一个小时 richup,导致十一点才睡觉,挺浪费时间的,明天不能再这样了。
Day -3 (2022.12.3)
六点五十的闹钟,但是八点十五起床,等了整整三分钟电梯差点错过核酸。
做了一个小试验:起床时叠了被子,保洁阿姨没有来叠被子,说明我叠被子的水平已经和她差不多了。
早上 VP Educational Codeforces Round 138 (Rated for Div. 2),被 A 谋杀了,unofficial rank 2。F 和之前互测某道题很像。
被 zky 催补 F2 和 G 了/kel,但是这些题对于我来说有些超前,等我水平够了再来做。
睡半小时午觉,下午整了整博客,也没做啥。
晚饭错将青椒当成四季豆,吃了几个差点没吐出来。
晚上又在打 richup/fn。明天再玩游戏我是狗。没有锻炼所以不洗澡了。
Day -2 (2022.12.4)
上午 VP AtCoder Regular Contest 151,rank 10,感觉良好。
中午看舍友玩一会 starblast,挺好玩一游戏。
睡午觉,健康生活。
下午 VP Educational Codeforces Round 137 (Rated for Div. 2),被 jiangly 爆杀了。
晚饭前群友在本楼层聚会,因为晚上 AGC 赶着吃饭没去,但是在门口偷听了一会,声音还蛮大的。
坐电梯的时候碰到了 hhz,orz。
吃过晚饭休息一会,去健身房锻炼,回来洗澡洗衣服卡点 AGC。
A 猜个结论,寄了。B 猜个结论,寄了。罚坐一小时之后我决定写暴力对拍,很快修正了这两题的结论。
然后全力冲 C,推出来一点性质,似乎没啥用,一直坐牢到比赛结束,寄!
Day -1 (2022.12.5)
本来约好一起定 7:30 的闹钟,结果响了之后大家都没起床。一觉睡到 8:50。
上午 VP CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!),perf 2900,感觉还行,就是这个 E 做得太慢了。
中午看舍友玩一会 starblast。吃过午饭补了题解,更新一下游记。
感觉这个 G 可以做,晚上补掉。
下午吃掉了一大袋薯片,很爽。
然而晚上在和群友打牌开歌会,很欢乐。
收拾收拾东西,明天可以离开这个鬼地方了。
Day 0 (2022.12.6)
昨天晚上睡得不是很好。
早上起床开幕雷击,14 楼有人混检阳性,整个 14 楼被都封了。还好我在 13 楼。吃过早饭回来继续收拾东西,结果跟我说不走了,就在酒店里面打 CTT,还要换房?????一整个无语住了。
签完到 VP Codeforces Round #831 (Div. 1 + Div. 2),感觉不错。
下午补题写题解。如果我没记错的话还和群友打了牌。
晚上八点开始换房,十点换到我们层说太晚了明天再换,有点搞笑。
Day 1 (2022.12.7)
早上七点二十起床,吃早饭,进考场坐了半个小时牢。
开题。T2 看起来挺有意思,T1 T3 稍显困难,决定先做 T2。这一做就是三个半小时,试了各种各样的做法,获得三十分的好成绩。
总不能两位数吧,剩下一个半小时补了补两题的暴力,最后二十分钟大概想明白 T3 了,结果连验证正确性的暴力都寄了。20 + 30 + 36,rk46。额额,今天不是一般的寄。
没啥心情打牌了,回来补 T3,仔细想想发现结论胡假掉了。
下午有场 ICPC,和 csy jgh 组队打了 rk3,被 csy 带飞了。
晚上懒得锻炼,懒得洗衣服。
Day 2 (2022.12.8)
早上七点五十起床,吃早饭,进考场坐了三分钟牢。和昨天座位一样,这下成不动点了,结果发挥也成不动点了。对面是 dottle。
开题。T1 T2 T3 都不太会。上来胡了 T1 结论,假了,但是拿了 30 分。写对拍,发现确实假了。把对拍暴力交上去,又拿了 20 分。T2 一看就是 lxl 题,轮廓线什么的想不太清楚,打了前三档暴力,50 分。T3 倒是相对比较可做,但是一开始没想清楚,没注意到所有叶子深度全部相同的条件,也是打了前四档暴力,50 分。这个时候已经三个半小时了,三题还是只有暴力分。接下来一个小时,在 T1 T2 T3 之间随机游走,并且坐牢。
最后半个小时,看到了叶子深度全部相同,会了维护等差数列的做法,大概是 \(n\) 乘以叶子个数平方的,写了一发又拿 13 分。然后这玩意根号分治一下可以做到 \(n ^ {5 / 3}\),交上去 sub 6 WA,sub 7 TLE,感觉 TLE 的原因是我把所有等差数列都存下来了(肯定会 MLE),可以离线每次处理一个深度,但是没时间写了。修完锅过不了样例,最后二十秒都绝望了。扫视了一眼我的代码,差分减号写成了加号,改完只剩五秒。最后没交上去,差一秒,呵呵。50 + 50 + 63,rk 28。加上打得稀烂的 Day 1 是 rk 44,看来 CTS 是无望了。
下午在 1312 和群友打牌。
晚饭盒饭挺不错的。
晚上 VP Round 800 Div. 1,这个 D 瞎勾八剪了剪枝就过了,感觉有点离谱。
去健身房锻炼。十点半准时睡觉。明天起来烧水泡咖啡。
Day 3 (2022.12.9)
不希望翻盘了。翻进 CTS 去 WC 还要再隔离七天,学考也被冲掉了,不如不进前三十。
早上七点五十起床,冲了一杯拿铁,进考场的时候已经可以敲键盘了。
开题。T2 好像之前集训的时候做过,但是想不起来做法了。T3 看起来非常数论。T1 一眼看出模 \(m\) 独立,比较可做,决定先搞 T1。先往动态 DP 方向上想了二十分钟,发现做不到。关键在于怎么合并两个段,猜了一个假结论:从当前时刻开始,找到第一个洗澡时间为他在原序列中的洗澡时间的人,则它之前的人的洗澡时间为当前时刻加上 \(1T, 2T, \cdots\)。花了一个小时实现这东西,又花了十五分钟调试,结果发现假了,因为就算一个人没有等待,它在原序列中也可能等待了一些时间。将近两个小时只有 10 分,看来可以退役了。
冷静下来想想,其实只要找到第一个没等待的人就行了,那么在它之前的人的洗澡时间肯定是当前时刻加 \(1T, 2T, \cdots\),可以快速计算。找到第一个没等待的人显然线段树二分,然后倍增维护维护就行,结果一算,开 \(n\log n\) 个 __int128
空间爆炸了,兄弟,心态也跟着爆炸了(赛后发现空间没有炸)。不管了,先用 ll
顶着再说。在假做法基础上改了改代码,又写了半个小时左右。本来没打算拿多少分,因为没开 __int128
,结果直接过了可还行。那就不管了。
CTT 终于过题了,太感动了,老哥。
T3 感觉不在我能力范围内,先打个 45 分暴力再说。这种肯定是设个阈值分类,那我先对子树大小 \(sz\) 打个表,发现值比较大的时候,很多 \(sz\) 相同,然后我冷静分析一下,发现如果 \(n / i = n / j\) 且 \(i, j\) 的最小素因子相同,那么 \(sz(i) = sz(j)\)。这下这下了,设个阈值 \(B\):
- \(n / i\leq B\) 的,直接枚举整除值 \(K\) 和最小素因子 \(p\),算出 \(f(K, p)\) 表示 \(1\sim n / K\) 有多少个数使得它的最小素因子恰等于 \(p\),再算出 \(g(K, p)\) 表示 \(1\sim K\) 有多少个数使得它的最大素因子不超过 \(p\),那么整除值为 \(K\) 且最小素因子为 \(p\) 的数的个数就是 \(f(K, p) - f(K + 1, p)\),可以批量计算,且对于 \(p > K\),它和 \(p = K\) 等价。
- \(n / i > B\) 的,直接倒序枚举 \(i\) 和不超过 \(i\) 的最小素因子的所有质数 \(p\),如果 \(n / (ip) > B\),那么它的子树大小已经算出来了,\(n / (ip) \leq B\) 也可以直接调用 \(g(n / (ip), p)\)。
\(g(K, p)\) 容易 \(B ^ 2\) 预处理所有值,甚至可以做到 \(B ^ 2 / \ln B\)。问题在于我不太会算 \(f\),只会指数级容斥。实现了一下,发现 \(B = 100\),\(n = 10 ^ 9\) 都要跑 1.7s。看来 \(10 ^ {10}\) 无望了。赛后听讲评发现这个 \(f\) 可以直接递推?第一维只有整除值种取值,第二维只有 \(B / \lg B\) 种取值。我是憨憨,哈哈。
一通分析猛如虎,拿到 70 分的时候只剩下 1h 了。
T2 先打一个全排列熟悉格式,2 分。再打一个爬山,12 分。改进一下,先随一个错排,花 \(\mathcal{O}(n)\) 的代价确定两个位置,然后每次只在没有确定的数当中随机交换一对,若正确数量变多则可通过已经确定的位置确定正确的位置。这样好像是 \(n ^ 2\) 的,20 分。这个时候只剩下半小时了。
想到一个比较靠谱的 \(n\log n\) 做法,就是借助已经确定的位置,每次随机排列没有确定的位置,如果正确数量变多了,那么我们可以花 \(n / cnt + \log n\) 的代价确定所有正确的位置,其中 \(cnt\) 是已经确定的位置数量,\(\log n\) 是二分。
写一发,表现不是很好,\(n = 1000\) 需要 \(18500\) 次询问左右,很寄,只有五十多分。但是只剩下一分钟了,所以摆了。
出考场发现好像二分和 \(n / cnt\) 的部分都可以除掉一个 \(2\)?如果新增确定的数量已经等于正确数量变多的值,就可以不继续往下枚举了。以及我可以根据当前正确位置的数量和递归左半部分正确位置的数量直接得出递归右半部分正确位置的数量,那就能过了?至少多拿一车分好吧。而且 std 询问也在 \(9250\) 左右,虽然做法似乎完全不一样。笑死,我直呼我直呼。
100 + 53.45 + 70,rk14,总榜 rk32。
不太好说,明天保持这个状态就可以翻盘了。
下午在 1312 和群友打牌。晚上 VP EDU 136,被 C 爆杀了。
不锻炼,但是再不洗衣服就没棉毛裤穿了,呵呵。
Day 4 (2022.12.10)
先不开香槟了,但是进还是不进都赢麻了好吧。
你可能小赚,但我永远不亏。
正常七点四十五起床,冲了整整两杯拿铁,今天必过两题好吧。
开题。T1 串串题,但是 85 分暴力。T2 神必交互,先丢了。T3 一看就是我不擅长的容斥计数。Not for me, thanks.
先搞 T1。这不首先建出 SAM?从每个子串的贡献角度想,感觉不太好维护。扫描线就很好写 \(n ^ 2\),先把暴力写了,卡了卡常才过 85。此时一小时不到,得分暂时跑赢了时间。
然后肯定做 T2,思路还是比较清晰的,首先大方向得想对,然后随机枚举比较靠谱的做法,枚举出来之后非常高兴,上个洗手间冷静一下,希望没假。五分钟就写完了。挺神必的这题,会做就拿满,不会做也没啥部分分。
两小时 185 分,领先时间 65 分,天胡开局,兄弟,这把稳了。
T3 暴力不太好写,写了半个小时再打个表,再砍 30 分。比赛刚刚过半,已经 215 分了,兄弟。
感觉 T3 会非指数级基本上就过了,但是我不太擅长,决定先把 T1 正解打出来。
想了十几分钟,会做了,写了大概半小时,被卡常了,md。卡常卡了四十分钟,真是吐了,评测机真的好慢 ,出题人卡尼玛常呢,天胡开局打得稀烂/tuu。这下只剩一小时了,想了四十分钟 T3 不太会,期间看到 xtq 和 lyp 已经在左顾右盼,东张西望,估计是阿克了。希望今天阿克人不要太多。
开摆!打二十分钟俄罗斯方块。
qlr csy zky wxw 也阿克了。
100 + 100 + 30,rk 7。四天得分单调递增,排名单调递减,翻盘!把昨天总榜在我上面的 tzc ycx ymx 全翻下来了。今天发挥还算满意。
下午在 1312 和群友打牌。
总榜在闭幕式上才公布,rk 28。尽管前两天打得稀烂,但还是非常惊险地进入了国家候选队。CTS 我来啦!
晚上继续 1312 银趴,重温了一遍复联 4。