2024 ICPC 武汉邀请赛游寄

arimx 发布于 2024-05-02 12 次阅读


由于懒癌发作,去年的两场 ICPC 都没有写游寄。我想了想,今年还是继续写吧。

24.4.29 Day -2

由于没抢到五一及前一天的车票,我决定提前出发,今天就去武汉。

由于路上堵车,我差点没赶上火车,到检票口的时候离发车只剩 10 分钟。

想起去年去杭州站的时候,我因为忘拿行李耽误了时间,确定赶不上车了,就打车到火车站改签。到了火车站之后,我才意识到上次从哈尔滨回来顺便把杭州来回车票的报销凭证打印了放在学校,于是又回学校去拿凭证,多花了两倍的车费。到火车站改签之后,还等了几个小时时间才上车。惨痛的回忆。

好在这回时间卡得准。

24.4.30 Day -1

祝我生日快乐。

今天在 lprdsb 的提议下去了湖北博物馆,lprdsb 说他想看勾践剑,配得上他这个艾尔登之王。

进了博物馆之后,我们从负一层开始逛,遍历了负一楼和一楼的展厅,才来到二楼。一上二楼,环绕整个楼层排队的人海扑面而来,就是在等待进入勾践剑的特别展厅,吓了我一跳。好在等待时间不算长,20 分钟就能进展厅。

进了展厅之后,不见剑影,只见里三层外三层堆着许多手机相机的人肉支架,不时还有闪光灯偷袭,随后就能听见安保人员喊“关上闪光灯”。这一切好像某种神秘的仪式。我在这围城外侧等了许久才挤进去,端详了一会儿剑上的菱形花纹和剑柄镶嵌的绿松石,拍了两张照片,又花了更多的时间才出去。

剑的清冷无情与人群满溢的欲望形成了鲜明的对比。

出了展厅,lprdsb 说勾践剑太短了,他很失望,还是双手大剑比较好。

晚上吃了小龙虾,爽。

24.5.1 Day 0

睡到中午,然后去参加热身赛。

热身赛题目没什么难度,ACD 很快就过了,lprdsb 出 B 的时候却遇到了奇妙 RE,原来是区间修改的右端点没判是否为负数。希望明天没逝。

晚上吃了武大门口的一家烧烤,烧烤味道不太行,炒菜倒挺好吃。

24.5.2 Day 1

正式比赛,因为网络问题延迟了 10 分钟开始。

I 和 K 的做法都很显然,我很快写完交了上去。评测 pending 许久,然后反馈 I 题 WA 了。我一看发现是局部变量没赋初值(本地居然能跑),改后过了,算上 pending 时间相当于两发罚时。好在 K 一遍过。

然后我们跟榜看 B 题,samnever 首先提出一个结论,在限定的操作次数内一定能把原序列调整为任意和不变的序列。之后我们想到,应当贪心地使最高位的 1 最低;更进一步,如果某一位上可以没有 1,就让这一位为 0,继续考察更低一位;如果某一位上一定有 1,则在这一位尽可能多地分配 1。结论符合直觉,但没能给出严格证明。samnever 尝试构造反例失败,于是我就按结论写,过了。

继续跟榜,我决定做 F 题。我的做法是先二分答案,每次查询都对矩阵进行分治,先二分中间一行,然后用这个结果缩短其他行二分的区间,结果 WA 2。samnever 觉得是因为询问次数超了,又写了一版记录当前每行位次,每次查询答案时直接平移的版本,过了。这个做法和题解一样,但我不理解为什么我的方法过不了。

lprdsb 觉得状态不对,去了趟厕所,回来之后说自己状态来了,随后连过 D、E 两题。排名陡然上升。

封榜前我们 6 题,我在写 M,lprdsb 在写 G。

对于 M 题,我的想法是从大到小贪心融合,如果当前没访问的最大数可以被融合,那就融合后加入答案,否则直接加入答案。写完之后捏了数据测试,发现存在非法访问,就看输出调了许久,无果,又在 lprdsb 写 G 题期间打印代码看。最后发现是因为在访问到 2 时,程序会判断 2 是否能与 3 融合,如果当前 multiset 内有至少 1 个 1、恰好 1 个 2,就会先把 1 个 1 和 1 个 2 删除,认为融合出了 3,再删除将要与 3 融合的 2,但这个 2 实际上已经被删除了。考虑这种情况之后提交,发现 TLE 了。我猜想是使用 multiset 导致常数太大。

而 G 题那边情况也不乐观,lprdsb 修改了许多处特判的情形,每次改完重测数据都会有一组原来结果正确的数据输出错了,到比赛结束也没改完。赛后过了样例,原来还是有情况没有考虑到。

反思,如何找准 debug 方向、提高效率,是目前很重要的问题。lprdsb 认为应当培养看代码 debug 的习惯,而不依赖测数据。

滚榜的时候,由于封榜后没有过题、罚时还多,我们原本以为一定拿不到金牌了。结果发现大多数封榜前 5 题封榜后过 1 题的队伍罚时都比我们多。最后我们竟然喜提金牌。

在我和 samnever 的强烈提议下,lprdsb 拿着 fufu 领了我们的第一个金牌。

好在这是邀请赛,如果是正式区域赛我们已经寄了。

晚上和 STL 一起吃了饭,去雀庄打了两个半庄。什么样的人才会在旅游期间还去雀庄啊?

24.5.3 Day 2

lprdsb 在 Codeforces 上过了 M,我一看也是用的 multiset,实现也差不多,那我到底怎么 TLE 的?未解之谜。