Day 998244350
模拟赛场场被学弟吊打。最后几天写了一堆随机化乱搞题以及奇怪的搜索,都是 CSP 不曾考的玩意(书接下文)。
点分治已经敲烂了。最后两场每场一个。
Day 499122175
学校发通知说 CSP 取消了。全机房都在开香槟(
其实自己想去考考看的,权当是在联赛之前看看自己的实力如何。
Day 998244352
不想敲板子。更不可能学新算法。听 cy 说他在比赛前都是不敲任何板子的,想想感觉自己考纲内也没啥不太熟悉(指敲不出模版题)的算法,决定 CSP 前啥也不写。
反转了,CSP 在天堂打复活赛打赢了肯尼迪和安倍晋三,成功获得了复活的机会。
晚上了解到今年还是 JSOI Linux + Windows 的组合。我的评价是 JS 这种强省难道连几百台跑得动虚拟机的电脑都找不出来吗?
只能祈祷 NOIP 给个好点的代码环境了
Day 998244353 $\equiv$ 0
CSP 前最后一天。虽然反复横跳但似乎并没有再次取消的迹象。
拿到了赛时同型号的 Thinkpad E490 笔记本,并被告知赛时没有外接键盘。我第一次在现实中亲眼见到 i3 的笔记本!32 位编译器。
简单敲了个 NTT 以及封装的多项式,感觉键程还不错,回弹力度刚刚好。遗憾的是 fn 和 ctrl 是反过来的,而且按 $\leftarrow$ 和 $\rightarrow$ 时很容易按到 pgup 和 pgdn。多项式编译一次需要 3 秒钟。感觉拿到了上古时期的电脑。
听了 qlz 的建议决定测试一下运行效率。开 O2 跑了 $10^8$ 次 $\log_2$ 函数,跑了 3 秒。同样的代码在我的电脑上只要 0.6s,效率差距一目了然不言而喻。显然我的机子是没有 CCF 的少爷机快的,所以赛时程序的运行时间失去了任何的参考价值(怎么和 JSOI2022 一样?我不好评价)。
中午颓了好一阵子,下午尝试适应一下考试环境,并被强迫使用一段时间的 Dev-cpp。敲了一个 Johnson,一个 Treap 以及点双边双,大致习惯了蹩手的键盘以及极慢的运行速度。
讽刺的是,我在自己电脑上完全模拟了 JSOI Linux + Windows 的比赛环境,并给这个虚拟机取名为 JSOI Windows。实际上,M1 套 Parallels desktop Win10 套 x86 on arm 套 qemu Linux 并没有比原始环境慢多少。
Day 1
上午在家,起来的比较晚。把 CSP-2020 的函数调用和贪吃蛇写了一下,并意识到自己两年前打 CSP 的时候时间分配是有多烂才能做到放着 T4 的 70 分水的离谱的暴力不打。
中午随便点了点外卖。吃完中饭睡了一会儿,1:45 才从家出发去往考场,果然到的时候已经开始试机了。不过,无伤大雅。
进了考场一看,难道是方舱医院?简直是人挤人,每个人可用空间的宽度只有 <0.8 米。怪不得不给外接键盘,原来是放不下 /tuu。赛前 10 分钟还是按耐不住敲了下板子,不过这省下来的几分钟并未对比赛过程
2:30 拿到题面,看了眼时空限制发现都挺足的,好评!简单扫了下题,一眼秒 T2。T1 没一眼切,感觉会要稍微想想。T3 题面描述很长,以为是大模拟啥的,先跳了。T4 一个树上问题,看起来很可做的样子。
那么就正序开题吧,争取 1.5h 过 T1 到 T3。前 25 分钟状态不是很好,口罩戴着有点闷,拿掉了。T1 由于 $k$ 很小,于是一直在想均摊复杂度之类的做法,没有任何进展。先去把 T2 写掉了,写之前没有仔细列出所有分讨情况,写的时候犯了一堆 sb 错误。一开始甚至以为只要维护一大一小两个 ST 表就可以,后来发现是我 sb 了,明明需要 4 个。加上浪费在 T1 的时间,写完 T2 大概花了 1h,看来是别想 AK 了。心态有些炸裂,不过没关系,时间才过去 $\frac{1}{4}$,优势在我。
回过头去看 T1,这才想到可以 meet in the middle。想到个 $\mathcal O(\frac{n^3}{\omega})$ 的做法,$n=2500$ 感觉挺能跑的,没想到怎么继续优化,直接开写了,甚至用到了 bitset::_Find_first 和 bitset::_Find_next。发现大样例跑的飞快,一看发现 $n=250$。什么破玩意。想着比赛机效率没有参考价值,就不造极限数据了,听天由命,反正 CSP(实际上后来把这件事抛到脑后了)。这时大约 1.5h。
仔细读了一遍 T3,发现就是动态维护是否是基环树森林嘛!60 分白给。但是正解没啥进展,$5 \times 10^5$ 的数据范围也不太像根号分治来着。推了 30 分钟左右没有想法,先跳过去看 T4 了,反正这题暴力也挺好打的。
T4 的 $k \le 2$ 一眼倍增 + 矩阵维护,草稿纸上画了画 $k=3$ 的情况发现就是能跳到 $s$ 到 $t$ 路径距离为 1 的点上,这容易处理,甚至树高 $\log$ 暴力跳还有一车部分分。看来这次 300+ 很 easy 了。然而 $\mathcal O(n \log n)$ 带上 $3 \times 3$ 矩阵的 27 倍常数感觉蛮离谱的。看了眼链和树高 $\log$ 的部分分提示,想了 $\varepsilon$ 秒发现可以离线下来点分治,这样就好写多了,常数大概比矩阵小(错误的,我赛时修修补补的程序有 50 多倍常数)。
剩下 2 小时,时间充裕,于是开始码码码。决定先把 $k=2$ 写了再拓展到 $k=3$,很快过了第三个大样例。自以为写完了 $k=3$,测了最后一个大样例发现答案比输出小?就离谱。对着代码瞪了一会儿发现是一些 sb 的错误,改完发现输出比答案大!有些怀疑是做法假了,又手玩了几个数据发现少讨论了例如从与路径距离为 1 的点跳到与路径距离为 1 的点的 $\varepsilon$ 种情况,并开始在程序上打补丁。离考试结束约 40 分钟时过了最后一个大样例,直接半场开香槟!
再然后就是 T3。我试图用带 $\log$ 的数据结构去维护出度的更改,这玩意真的可做吗?我不晓得。最后 15 分钟不想了,直接不带想的写个 50 分暴力。检查下文件名啥的,都没问题,就等待游戏结束了。
这么简单的题,JS 肯定一车人 AK 吧!我还是太菜了。/ll
出来以后听说 T3 是哈希,我在 $\varepsilon$ 秒内想到了 T3 的正解。哈哈哈哈 :sweat_smile:
感觉大概 $100+100+50+100$ 吧,但是所有 OJ 上测的 T3 都是 60 分。那就当自己是 360 好了,只要 T1 能放 $\mathcal O(\frac{n^3}{\omega})$ 过就行。我是相信 CCF 的(大雾)。
Day $+\infty$
T1 T2 T4 都是套路题,唯一一个需要思维含量的就是 T3。然而我就是 T3 没有做出来,导致错失了一次 AK 的好机会。
之前模拟赛也出过 xorhash,jcy 和 jth 都会,我没做出来。这次又碰到了奇怪的 hash,高水平的选手们大都切掉了,我也不会。说明自己的脑洞还是不够大,乱搞的技巧研究的还不够深入。或许应该多请教请教 lxr 学长?(
感觉套路题练够了,之后的训练要着重 CF 类型的思维题。多积累积累奇怪的点子,说不定再碰到脑洞题就能多一条路走。
有趣的是,倘若弹出队尾的条件是 $\le$ 的话,那我就被单调队列了:smile:。
不过没有关系,心态放好一些。今年的我相比去年水平有了非常大的提升,也有了足够的实力打好接下来的联赛。校内对 CF 类型题目也重视起来了,一切都在朝着好的方向发展。
NOIP2022 RP++
最后修改于 2025-06-30
Git 版本: 0864e96