UESTCPC-2026 游记
3.2
新学期有一门选修通识课,直接就叫《ACM-ICPC 算法与程序设计》,说是面向大众的 XCPC 入门课程。一看课程简介,课程难度只有洛谷橙黄题级别。
「如此就能白嫖两个通识学分,何乐而不为?」
第一节课,同其他课一样吹水加说明成绩构成。
「所有人都要报名参加校赛,比赛成绩会占你们期末分数的
OrbisLumen 有组队意向。虽说此人零基础,不过从往年题来看,题目基本是单挑都能进决赛的难度,加之校赛也不牵扯什么利害关系(如校队选拔之类),于是答应了。
3.3
「零基础归零基础,但总不能让人真的 onsite 从头到尾罚坐吧。」我如是想,邃打算对其加训。
晚上花了两个钟拿几道题向其介绍了几种常见的题目类型。
3.6
OrbisLumen 晚上无事,于是把他拉到宿舍进行一个 cpp 的速通。(其实就是介绍 STL)
3.10
拉上了 fanjunwen,队伍组建完毕。
3.13
略微想了想,一个零基础,再怎么拼命加训也很难在不到一个月的时间里摆脱赛时罚坐的命运。于是改变策略:让 OrbisLumen 基本抛弃代码实现,加训一些常用算法和解题思想,这样说不定能让他在赛场上把一些简单题口胡掉,甚至贡献其他题的一些 idea。
晚上向 OrbisLumen 讲解 BIT,线段树,树的序列化还有与这仨有关的成吨前置知识。(算是一个 DS 专题?)
3.16
定下队名:「想不出队名还要去问 LLM 的屑队」。
晚上为 OrbisLumen 补上树剖部分,然后开图论。
3.19
晚上继续为 OrbisLumen 速通图论,给 DP 开头。
3.23
继续速通 DP。
3.26
最后收尾 DP。
3.27
晚上热身赛,验证了可以三台机子同时登陆一个账号。
突然想起没跟 OrbisLumen 介绍过交互题,所以让他写了 B。
D 是一道神秘魔改最短路,然而调了半天调不出来,红了。
3.28
初赛。
08:30,下床洗漱吃早餐。
08:55,三人在 OrbisLumen 宿舍集合。我大致布置:OrbisLumen 正开,fanjunwen 倒开,我狂暴在中间搜索签到。
09:00,准时开题。30s 不到,我说「C 秒了」,然后开始狂暴抢首 A。
09:10 左右,OrbisLumen 说他开出了 B,我略看一眼,应该是背包版子。OrbisLumen 毛遂自荐说要自己实现。
写了快二十分钟 C,一测样例发现爆了,再一读题,发现是要统计所有路径,我读成是统计从根到所有点的路径。
想了一会感觉 C 一时半会开不出来,邃放弃。于是跟榜,一看 L 是签到。打开题面一看,是一个朴素
09:31,OrbisLumen 交了一发 B,T 了。
09:32,光速写完 L,提交,过了。继续跟榜看第二道签 F,第一眼看像是个 nim 游戏状物,仔细想想又好像不是。
这时候 fanjunwen 说 Q 的数学式子他化不开,不过 P 的二分他可以写。我略看了一眼 Q,需要一个等比数列求和,但是模数不一定是质数,不能直接套公式用逆元做。一时半会蹬不出来,继续想 F。
突然发现 F 是诈骗题:每一步都存在可以使游戏继续进行的取法,于是胜负只与元素个数奇偶性有关。光速实现提交,09:47 通过。
fanjunwen 同时写完了 P 的二分,一交 WA 了。
我再看几分钟 Q:「说不定能直接用 Python 大整数直接做除法硬操过去?」
10:04,交了一发,T 了,果然不行,于是换题开。四处搜寻结果发现 J 是树剖板,于是激动地开写。
同时,fanjunwen 提交了第二发 P,还是 WA 了。人有点红了,邃暂时放下 P,去看几眼其他题,然后发现 E 貌似可做。
10:08,OrbisLumen 终于调过 B,可喜可贺。我便把 Q 的式子丢给他试试。
10:20,fanjunwen 提交了 E 的一份简单实现,WA 了。随后仔细想想才意识到 E 应该是什么最短路或拓扑序 DP 状物。
发现自己之前写的树剖都是 1-index 的,于是没粘,重新写一份。
正奋键疾码 J 中,OrbisLumen 提出:「Q 的式子可不可以分治做?比如
我去还真是!
但是 OrbisLumen 说他有点不会实现,于是我花几分钟自己写完交了。
10:48,通过 Q 题。
这时 fanjunwen 在跟榜,说 H 应该可做。于是经过三次提交后,终于在 11:12 通过 H 题。
几万年没写线段树了,有点怕写挂。邃让 OrbisLumen 充当测试工程师。不过几轮手玩下来看似是没挂。
写着写着才发现,查询操作总共就一次,如果失败了后面的操作就都可以不管了,于是每条边至多被覆盖一次,那就可以直接暴力做了。但转念一想,都写到这里了还是直接一剖到底吧。
11:34,提交 J,一发过,众人欢呼。
去吃午饭的路上,其他两人说 E 应该是可做题,让我吃完饭看一下。
我没等吃完饭就打开手机看题:「这不就佳佳的魔法药水吗?」
吃完午饭,其他两人要午休,我开写 E。在 RE 一发后,在 13:20 通过。
大概 13:30,fanjunwen 午睡起来继续跟榜,发现 M 是可做的,在基环树上的唯一一个环上二分即可。
于是 fanjunwen 写 M,我重写 P 的二分。
13:41,又交一发 P,依旧 WA,我怀疑是不是题意爆了。
13:52,发现是边界炸了,于是改完过了。
接着跟榜,准备 AKO 同步推进。感觉这三题里面 A 应该是最可做的,于是重心放在 A。至于 C,总感觉应该就是点分治,于是放着没管。
想了大概有一个钟,只出来一个「先钦定一个根,如果询问的点在原树上不是询问的根的祖先,答案就不变」的性质,但还是做不了。
fanjunwen 推进 M 的实现很不顺利,在 15:18 RE 一发后就一直干瞪屏幕。
大概 16:00,我说干脆把开 A 的接力棒交给他,我去实现 M。
写着 M,发现细节确实不少。16:24 交了一发,WA。
「没理由啊。」感觉是缓冲区没清干净炸了,加了几行。16:29 又交一发,依旧 WA。
再蹬两眼,哦,二分判断条件炸了,写的时候脑抽认为交互器返回的是路径上的结点数了,有点幽默。改掉再交一发,过了。
fanjunwen 提出:「这个 A,如果能搞成一些子树相关的操作会不会好做些?」我也开始往这个方向思考。
终于,历经约一个小时的罚坐,我得出「一个结点的颜色就是其子树异或和」,然后换根的话就用可以用子树消贡献随便搞搞。另外两人惊呼:「我操很对!」
直接开写。因为在询问点是询问根的祖先时,需要求询问根路径上的询问点的直接儿子,刚好 J 又写了份树剖,于是直接搬过来用。
大概 17:50,写完发现样例不过。跑断点调试发现实现根本就没炸,性质假了。
于是三人收设备各回各家,遗憾离场。
回到宿舍,又感觉还有抢救的空间。仔细想想,应该是「一个结点的颜色就是其子树异或和再异或上其子树大小奇偶性」。
于是改了两下,18:29 又交一发,T 了。
估计是人大常数傻,于是把树剖换换成倍增跳祖先再交一发,终于过了。
吃完晚饭回来打会游戏。一到 21:00 准时水群加看题解加看 AI 队乐子。
C 原来直接构造哈希加启发式合并就行了,onsite 其实也不是没考虑过启发式合并,但没有想到可以哈希做,感觉要维护的信息体量太大了,再加上先入为主的「正解应该就是点分治」的印象,就没接着往下想了,还是有点可惜。
KO 就算了,感觉自己的人类智慧还远没有达到这两题的标准。
4.3
补题通道终于开启。补了 CK 和 onsite 不是我写的 BH。
4.4
和 fanjunwen 打了洛谷上面的 USTCPC-2026 重现赛,发现全是屎题。坐牢五个钟就过四个题(还有一题是 hello world 题),居然还能排到 rk32,有点神。
想着明天决赛应该没午饭吃了,于是晚上先去小卖部买了每人一根巧克力加一瓶水,准备赛场补充能量用。
4.5
决赛。
搭了 09:30 的校车去清水河。10:20 抵达赛场签到领衬衫。
OrbisLumen 还是觉得不吃午饭撑不到 17:00,于是去清水河的麦整了三堡三可还有几块翅。但我刚吃早餐还没饿,就先把可乐喝了,准备把堡带进赛场吃。
11:40 进场。说是 11:55 才能动机器配环境,但我没管,先运行 setup 再说。结果发现提前动机器是对的:机子龟速,setup 跑了六七分钟才跑完。接着安装 VS Code 的插件,结果插件又安装个十分钟。好不容易插件安装完,随便写一段东西来测一下 gdb,结果发现终端跟榜打不开(赛后发现好像很多机子都这样),于是紧急切换 RedPanda 当个保底用。
12:00,准时开题。依旧 OrbisLumen 正开,fanjunwen 倒开,我在中间搜索签到。
两分钟后,I 被秒了,上机开写结果被边界条件卡 dirt 了两发,有点唐了。
同时,OrbisLumen 觉得 C 可做,fanjunwen 在想 J。
12:17 终于通过 I。我开始跟榜,发现 F 是模拟,邃开写。
写了十几二十分钟,一交爆了,一看没输出 empty,改了又交还是不对,人有点懵。
怀疑是卡自然溢出,于是开写双模哈希。
12:50,其他两人讨论了十几分钟后,严格证明了 C 题猜出来的一个答案是对的,于是我照着式子一写过了。
我继续写双模哈希,OrbisLumen 看 D,fanjunwen 继续看 J。
双模哈希写完一交还是 WA,那估计就是还有 edge cases。
蹬了几分钟没蹬出来,于是叫 fanjunwen 来帮忙蹬,我看 J。
看了两眼感觉 J 可以莫队,于是上机用半边屏幕写,另半边放着 F 让 fanjunwen 继续蹬。
几百万年没写莫队了,J 写了快一个钟,fanjunwen 盯了快一个钟的 F 居然也没盯出来。
一交 J 结果 RE 了,人又懵了。
于是 gdb 跑了一会,发现没有答案时依旧访问了 std::map 的滚木元素。改过来一交变成 WA 了。
OrbisLumen 开其他题也没开出来什么进展。我想了想,干脆其他题先放了,先过这两题要紧。让 fanjunwen 帮忙想 J 的 hack 数据,我和 OrbisLumen 一起盯 F。
就这样三个人干瞪眼了二十分钟,两边都没什么发现:fanjunwen 的每组 hack 全都过了,OrbisLumen 一行一行地质疑也没质疑出来啥。
于是老实花十几分钟写了 J 的对拍,一拍就拍出了 hack 数据。借着 hack 数据跑 gdb 又跑了十几分钟,终于找出了那行不像是人能写出来的代码:
std::reverse(l_point[i].begin(), l_point[i].begin());
气笑了。
改了一交结果 T 了。仔细想想发现如果很多区间的端点都在同一个位置上的话,莫队确实会爆。(因为题目问的是 max,所以在区间 extend/shrink 的时候需要遍历以这个位置为端点的所有区间;如果问 cnt 才是能做的情况,可以直接二分。)
想着会不会数据水一点,能卡常抢救一下,于是写了个快读快写,还是 T 了。
于是叫上 fanjunwen 一起想想能不能快速处理这个遍历或者另外搞个非莫队解。
OrbisLumen 也没看出 F 到底错哪了。我想着 F 也写不出对拍,于是让他试着 hack。
一看时间都快封榜了,忙活半天就过两题,麦也没得吃,甚至水都没喝一口,感觉有点 dead inside 了。
16:14,终于,OrbisLumen 丢出来的(大概是)第十组数据终于 successful hack。我一看,原来是重置当前连续复读语句后,没有对
过题的时候心情有点复杂,一瞬间似乎想起了 GXCPC-2024 的 M。
还剩四十多分钟,三人集全力再挣扎下 J。
16:45,我好像有点想法,但又好像没有想法。想着已经封榜了,就随便写一发玩玩吧,给等下滚榜留个悬念。
结束,收拾东西去听讲评加滚榜。
因为赛事就没得看几个题,所以讲评除了 D 和 J 都没听。一说 J 是二维数点,我的确马上反应过来了,确实是这么回事;大家又说这个二维数点「很典」,我只能表示还是写题写少了,区啊。
滚榜,发现我们的滚榜图在一众屌图中属最搞的一批之列。
本来以为过三题要三等了,结果发现是二等,而且过五题才有一等,顿时感觉心里平衡了一些:虽说过程是很区,但是只看最后结果的话,还是符合赛前预期的。
三人打算捧着气球合照。因为 F 是封榜后过的,没发气球,于是捡了别人的一个 F 气球去合照。
三人先回二环内,然后去吃了拉面。最后我回到宿舍实在是累了,于是把游记丢第二天写。
4.6
中午,写游记中,突发趣事。(跟比赛也有一定关系吧,所以也写进来。)
学校的 XCPC 群是一年一换,旧群的解散时间一般都在次年(指旧群生命周期的次年)的校赛前后。结果群主把手滑把新群解散了,十分幽默。