2024 ICPC 南京区域赛 记录

发布于 2024-11-02  783 次阅读


2024.11.02 Day1

前一天很早就睡了,早上八点从学校启程,十一点抵达南京,不到十二点即到达签到地点。

排长队签到后见到了 panda,从他手上拿到了若干 Hydro 徽章。不只是使用队名在排行榜上进行了推广,也同时进行了一些线下的推广。

左手边紧邻着满编队 赤橙黄绿青蓝紫(蒋凌宇、钱易、时庆钰),可以说确实给到了十足的压力。不过跟 Qingyu 比较熟,聊了些天,倒也觉得不至于感到太过压力。

热身赛启动,我可能比较紧张,加上队友可能相对松弛(?),给队友上了不小压力,被队友指出。明天应该避免。

题面为一份中文题面加上三份英文题面,场上对于“如何分配这一份中文题面”做了一个简要的讨论,加上赛后的重新讨论,决定使用“每人一份英文题面,并按需阅读中文题面”的策略。

发现热身赛大约是过去五场的所有袋鼠题。A(构造操作序列使得树状迷宫内的袋鼠聚集于同一点)在场上可以通过随机乱走通过,但开场时通过直觉,和大量快速产生的 WA 提交判断需要使用更加精确的做法。初步看题后 pengpeng 发现 B 是一个相当显然的两行交互,上机实现,于 9min 通过。youwike 阅读 C 后发现 C 也是一个相当简单的分类讨论,上机实现后在 16min 通过。此时我阅读 D 发现是一个实现有些困难的题目。在经历一段时间的思考之后上机实现,中间略微卡壳,在一些调试(花费了不少时间)之后于 44min 通过。

此时 pengpeng 会了 E,youwike 会了 A。鉴于 A 仍有较多 WA,pengpeng 决定先实现 E。但是 E 的实现花了较多时间,在大约 75min 时由于调试不出错误,pengpeng 打印下机并让 youwike 上机实现 A 题。后发现一个错误 return,改正后于 85min 通过。youwike 于 88min 提交 A,但是发现 WA,后经过调试发现也是一个错误 return 问题,改正后于 99min 通过。最终得到热身赛 rk9,校排(?) rk5。

后面大概测试了一下本地与评测机性能,两者性能接近并不算太差。

热身赛暴露出来一些问题。除了给压力的问题,还有对 Ubuntu 老环境下一些快捷键的不适应,还有对 DomJudge 的不熟练运用。在场上我们讨论并测试了关于 VSCode 自动保存、命令行粘贴、代码运行等问题,submit 使用,DomJudge 使用,打印功能使用,还有发掘出来的 compileg++runcpp 工具的使用,等问题。

感觉也还可以,到酒店办理入住后整理一下,写下今日的总结,就准备休息了。

2024.11.03 Day2

起床,收拾,早饭,走路去赛场,到达的时候还有半个多小时开始比赛。

通过对气球颜色的观察,以及对气球室的偷窥,我们认为 E(大红色)是签到题,其次可能是 G。就在我们讨论这个话题的时候 chenjb 老师还刚好路过听见,说:“不要猜题目了,我们已经移除了所有的签到题!”但是气球室大量的红色气球还是笃定了我们开 E 的想法。于是由我坐在机位,并且决定开场先把中文题面给到我,由我来开 E 题。开场前我还询问 pengpeng 要不要我来先开始配置 IDE 和缺省源,由他来阅读题意然后传授给我,不过他觉得这样太慢了不如我自己看,并且表示:“你又拿不到一血你不用那么急!”

开场,直接读 E 题,题面很短,在阅读题目两秒钟后就会了签到,于是开始实现,于 00:04 的时候提交并且通过。成为全场第一发提交以及一血。通过之后我拍案而起直接受到了周围几个队伍的注视,确实很大程度上增长了士气。后来 panda 给我们送过来了一血袋鼠气球,我们对打星队还能拿到一血气球表示了震惊,但是确实有点高兴,而且作为本人第一场 XCPC 比赛的第一道题目第一发提交,确实是一个良好的开端。

之后进行了几分钟的读题,到了七分钟,有一支队伍通过了 B 题,并且 B 题气球颜色为棕色,相似于袋鼠的颜色并且与场上选手的衣服颜色相同,我们认为很有可能是签到题,便先一起阅读了这个题目。在理解题意之后我们从对待签到题的角度简单进行了讨论,得出了一个较为模糊的不很复杂的动态规划做法,youwike 认为他完全会了可以实现了,于是便让他上机进行实现。

然后我使用中文题面大致阅读了每一个题目,对每一个题目的类型有了一个基本的了解。因为机时被占用并且我们的座位观看大屏幕的角度很小(舞台侧边),到二十多分钟左右时我们发现 J 和 K 有人通过。我在之前阅读过 J 和 K 的题目,由于它们的气球颜色分别是黑和白,所以并没有进行深入的思考。(并且 pengpeng 在平时多次提及“我还从来没有在赛场上拿到过黑色的气球”,表示黑白颜色的气球一般都是后期题,就在赛前我还在指着 J 题的黑色气球说看看他能不能去把它拿过来)决定由我来阅读 J,pengpeng 来阅读 K。在读完 J 之后我就会了 J 的做法,而 pengpeng 在稍微思考了一下之后也会了 K。由于 J 更加简单,于是在大约 00:30,youwike 写完代码可以下机静态调错时上机实现 J,最终在 00:41 时提交并通过了 J。

由于从开场到此时 B 题通过人数一直远大于 K,而 K 是一个简单的题目,我们认为 B 是一个签到题,继续给到大量的时间给 youwike 用于调试 B。在这期间我和 pengpeng 关注了另一个有人通过的题目 G,是一个交互猜树上点的题目,我觉得我之前似乎做过,但是想不起来做法。pengpeng 思考之后提出了一个在直径中点询问的做法,被我光速叉了。

这时 youwike 进行了一些调试并且提交了一发 B,得到了 WA 的结果。于是 youwike 打印下机,pengpeng 表示 K 可能有一些难实现,希望能够由我来实现,于是我上机实现 K。在 1:03 时提交了第一发,但是得到了 WA,于是打印下机,换 youwike 上机。静态查错一段时间后发现一个低级错误,进行了修改后于 1:12 再次提交,又一次得到了 WA 的结果,由 youwike 继续上机调试。但是 youwike 经过了这段时间的调试还没有找出错误,于是便让 pengpeng 也来一起阅读他的代码帮他查错,我上机进行动态调试。在试了几组小数据后发现了一个 BUG,更改后于 1:18 提交,通过了 K 题。

在此期间 pengpeng 阅读了 youwike 的 B 题代码,并且让 youwike 去思考别的题目。youwike 对 G 做了一些思考,之后他提出了一个基于重心的构造,与之前对此题做过思考的 pengpeng 交流了一下觉得没有问题,于是让他上机实现这个题目。

我也看了一眼 youwike 的代码,我们发现他写了巨大多的分讨和十几行的 DP 转移,pengpeng 认为这个代码救不活了,让 youwike 解释他代码中的一些部分,但是我们都不怎么能够理解为什么这么做,而且此时 youwike 的代码应该处在一个比较混沌的状态。他的做法看起来与我们最初讨论的版本并不很相同,pengpeng 提出让他来重构这道题目。youwike 做完 G 之后做了一次提交,得到了 WA 的结果,于是下机调试。

pengpeng 在重构完 B 的代码之后发现代码甚至无法通过最后一个样例,进行一些分析之后认为做法假了,便告诉我了这件事情。我们意识到 B 的问题非常严峻,并且已经让我们的过题数大幅落后。我和 pengpeng 重新从头考虑了 B,分别同时推导出了一个同一个做法,而且我们发现那就是 youwike 的做法!决定让我来实现这个做法,于是在思考完实现问题后我上机,在 02:01 提交并得到了 AC。

之后 pengpeng 和 youwike 讨论发现 G 的做法没有利用到所有三种返回情况,更改做法利用所有返回值后 youwike 于 02:15 提交了一发,评测了非常久,但是得到了 WA 的结果。我们认为一定是出现了边界情况,或者是极大情况下的错误。但我们也不很清楚是操作次数过多,还是询问构造不正确。不过我们认为这个问题应该是易于解决的,并且场上通过 G 的人数远超过其他题目,所以我们决定继续着重解决这一问题。我们三个人都阅读了代码,找出了一些小错误,在 02:21 又进行了提交,但是与上一次一样,在评测相当久后返回了 WA 的结果。

这个时候我的状态有所下滑,刚好送来了午餐,我就先吃完了午餐,然后跟榜思考了一下 C 和 I。我和 pengpeng 也讨论了 M,得出了一个做法,决定在比较靠后的时间实现。C 我最开始看错了题意,我以为是在 DAG 上的问题,我觉得这个问题不很好做,所以对 I 进行了一些观察思考。但是 I 也是一个数学题,剩余的计算部分需要交给 youwike 处理,但是他还在调 G。所以我们继续投入更多在 G 上。大约在 02:50 左右我们意识到现在的情况出现了比较大的问题。由于手上的 C 和 I 两个题目都是数学题,youwike 的占用导致了其他题目无法继续推进。于是让 pengpeng 负责 G 的继续调试,让 youwike 来与我看 C 和 I。youwike 表示他对 C 也没有什么头绪,但是当我跟他讲了我在 I 上的想法后,他表示后面的计算部分他可以完成。

过了一会,pengpeng 突然提出一个 G 的细节问题,我们发现他确实可能会让我们的询问次数稍微多一次。于是 youwike 上机修改,于 03:06 提交了一发,但是光速 WA 了,又发现太急了改错了,再次改正之后于 03:10 提交,终于得到了 AC 的结果。

之后再经过一段时间的推导,youwike 会了 I 的做法,由他上机进行实现。我和 pengpeng 转而讨论 C。在进行了一段时间的讨论之后我才突然发现题目中给出的是一棵树而不是一个 DAG。继续进行了一段时间的推导,也会了 C。当 youwike 实现完 I 进行静态调试时便上机实现,在四小时时实现完成第一版本,youwike 也调试完成 I,于 04:04 提交了 I 并且得到了通过。

之后 C 发现状态设计存在一些小问题需要改正,便下机重新推导转移式,由 pengpeng 开始上机实现 M。期间需要机时时优先保证 C,于 04:36 提交 C 并且获得了 AC。此后一直实现 M,但是时间不足以将它调试完成。

最终通过了七个题目,得到了总榜 rk23 校排 rk17,等同于正式队伍中 rk14 校排 rk11。


比赛结束刚拿到手机就被教练批斗了。在一些方面还是有待提升的,在比赛过程中出现了一些失误:在前期就三个人写了三份代码的 B 严重拖慢了开题节奏并且拉高了罚时;过于相信黑白气球代表困难题目,导致没有在第一时间阅读 J、K 两题也同样拉高了罚时;G 题思路不够严谨,场上个人可能过于紧张,无法较为冷静的面对问题。

虽然表现得不很好,但是从策略上来看并没有出现较大的问题。一些错误是无法避免的,例如 G 难以察觉的问题,但是应对的策略总体还算优秀。一个点是又出现了一个一直存在的问题,即 youwike 在处理问题的时候可能过于冲动,在实现之前需要让他强制冷静思考,并且不应该让他在节奏较为紧张的前期冲动做题,强调充分的阅读、思考和构思实现细节后再上机。这一点是队员定位的问题。另外,平时的训练中代码实现方面一般是我和 pengpeng 相对较多且负责前期开题,youwike 负责从中后期开始且实现较少,在这一场比赛中由于 pengpeng 的状态紧张,他的上机时间较少,让我的前期时间时间比平时更长,在中后期状态更差;而且我认为较少的上机也可能会降低他的思考效率,我们平时的训练也更加倾向于轮换上机,以及个人时间上穿插上机实现与下机思考。

大致就是如此,这周末继续努力吧。


我缓慢吐出一串啊吧啊吧并不再想说话