APIO2023 游记
似乎是 A 类选手捏。
Day -1
上午在学校打 APIO 前最后一场模拟赛,似乎是信心赛,四个取模题。T1 一个矩阵树板子,T2 随便推推莫反,但一开始看错题少乘上一个系数虚空调试 0.5h。T3 一个 dp,对着转移分讨硬优化成线性,然而步数少个 \(+1\) 调了 1.5h,浪费巨多时间。T4 求凸包面积的期望?似乎计算每个点对形成的有向边出现在凸包上的概率即可,写个 \(\mathcal O(n^3)\) 的暴力然而没处理好三点共线,又调了巨大多时间。最后想到旋转卡壳能优化到 \(\mathcal O(n^2 \log n)\),然而来不及写了,喜提 \(345\)。
怎么 \(9\) 个人 AK 啊,hbxql。为什么学校 OJ \(1300\) 的 rating 打 rank \(12/50\) 也掉分啊,什么破机制。larryzhong 喜提 rating \(+1381\),已经 \(6000\) 多分了,距离实现共产主义又远了一步。
中午在 E202 见到了 ZJ 队长 hzy,orz。
下午 3 点多去华山饭店报道,排队的时候前面是 Qiuly,再前面是 zak,感觉被薄纱了。排了将近一个小时,tzc 一直在大厅转来转去,但是他怎么没报 APIO?那他来干啥。秩序册里的名单一个 nw 的一个 hb 的交替出现,怎么这么魔怔?ducati 被分到和 sjc 一个房间,但是 sjc 来了又走了。到了房间发现室友 gzy 已经把行李放过来了,于是自己换完衣服也下楼吃饭了。伙食还和去年一样好,但是人太多了,队排的老长,怎么有种 nw 初中扩招但食堂不扩建的感觉?
开幕式被同学拉着去看了,你校初中生怎么都这么成熟?比我不知道强到哪里去了。zxx 好闪,节目都很不错,不知道比春晚好到哪里去了。为什么 namelessgugugu 不穿着 nw 校服上去跳舞?
晚上房间里很热闹,然而我不会打饥荒(悲)。
才发现忘记补今天 T4 了。哦,还有昨天的 T2。
夜里蚊子好多,原来是忘关窗户了。凌晨 1 点才正式睡下。
Day 0
5 点就被蚊子叫醒,外面的天居然是亮的。不过实际到了 7 点才起床。
吃完早饭去听字符串,感觉 xtq 把基本子串结构降的挺好懂的,至少我听明白了。
吃午饭,然后回房间摆烂。摆到两点半说要签到,什么玩意?去报告厅继续打 richup,但是写一个解释器和 OI 有半毛钱关系?话说自己以前粗略地看过编译原理,但觉得实现起来巨大抽象,原来还有 flex 这种工具?挺有意思的。不过没听明白,但不如打 richup。
继续摆到晚上,这下早点睡了。夜里蚊子比昨天少点,但我眼力极好、手速极高,每次出手主打一个稳、准、狠,每次都是一拍即中。
Day 1
怎么提前一个小时试机啊,真的要花那么长时间吗?《送餐到机位》感觉很抽象。到了 10 点准时按了开始比赛的按钮。
先读题,T1 题面好长,但看完感觉非常可做,怎么 \(K \le 30\) 有 \(97\) 分?看来 \(K\) 大的应该是诈骗。T2 一个数据结构,具体细节先不看。T3 怎么是通信,怎么还是造计算机?幸好我玩过 NandGame,感觉要留 3h 刚这个题。
那显然是正序开题了。先把 \(K \le 30\) 写了吧,不就是一个分层最短路吗?这么没技术含量。几分钟就写完了,直接交,根本没在怕的。queue 好久,先看眼 \(K > 30\) 吧,这不就跟 \(30\) 取个 \(\min\) 吗?这就切了 T1?那直接去看 T2 好吧。
这个 T2 一眼枚举中位数,然后转换成 \(-1,0,1\) 的序列。然后怎么做呢?\(5 \times 10^5\) 还 1.5s 感觉正解肯定是单 \(\log\) 啊,那就往这方面去想吧。先看眼 T1 测完没有。捏麻麻,怎么开场 10min 就要 queue 10min,这还怎么活?怎么 T1 还挂了?高贵的 wrong answer,连 \(n \le 3\) 都没过,真是小丑了。手玩了若干组 \(n = 3\) 的数据,原来 \(arr = 0\) 但不可达的点不能和超级源点连边啊,那赶紧修了再交,继续想 T2。此时已经开场 30min。
根本不会带 \(\log\) 的做法啊,怎么办啊。但是我好像会 \(\mathcal O(n \sqrt n \log n)\) 了,直接对于出现次数 \(\le \sqrt n\) 的枚举左右端点,\(> \sqrt n\) 的做二维偏序,感觉常数挺小啊,至少能过 \(8 \times 10^4\) 吧。不如再去看眼 T1 的评测结果,这下从 \(15\) 变成 \(40\) 了,怎么 \(n \le 3\) 还没过?赶紧查下代码,发现无解返回 -1
被我写成了 return 0
,我是智障吗?赶紧改完重新交吧,怎么 1h 多了还没过 T1,绷不住了。
继续想了半小时 T2,没有结果。1.5h 才收到 \(97\) 分的评测结果,很慌,不想继续调 T1 的剩下 \(3\) 分了,继续搞 T2。
现在该干啥呢?感觉 T2 的 \(1 \log\) 已经没希望了,为了能给造计算机留出宝贵的 3h,还是先写 T2 的 \(\mathcal O(n \sqrt n \log n)\) 吧,毕竟预估码长不超过 \(100\) 行。分块加个线段树罢了,写完 \(\le \sqrt n\) 的先交一发,然后 \(> \sqrt n\) 的就是一个 fenwick。工作人员送餐来了,怎么是学校食堂同款小憨包 + 香蕉 + 一瓶牛奶?笑出声。但还不饿,不急着吃。写完 T2 交上去了,没过多久 \(\le \sqrt n\) 的那发提交出结果了,\(41\) 分一遍写对,这下至少能对拍了。这时大约 12:15 了,基本完成了「刚 3h T3」的目标。
赶紧拿出草稿纸画 T3 吧,Alice 和 Bob 就是人都会,然后 Circuit 基本上把加法器搓出来就行。一边吃着小憨包,一遍列了个 \(2\) 次的半加器 HalfAdd、\(5\) 次的全加器 FullAdd、\(80\) 次的 \(16\) 位自然溢出加法器 Add16、判断俩 \(16\) 位数是否相等的 Eq16、以及根据 flag 选择两个 \(16\) 位数的选择器 Select16(函数名都和 NandGame 一样)。算算发现要 \(\mathcal O(nm)\) 次加法,似乎能有 \(66\),那还不赶紧开写?但是 C 风格数组传参是什么鬼啊,用个 vector 或者写个函数让我调用会死吗?这还咋在全局函数中修改答案?搞了半天终于不 Segmentation Fault 了,怎么输出和答案还不一样?这种东西是能调的吗。破案了,原来我所有循环写的都是 for (int i = 0; i < 15; ++i)
。
写倒也没写多久,顶多 1h 吧,2 点不到测了一组随机数据便交了上去,顺便看了看 T2 的评测结果。怎么还 TM 是 \(41\) 分?怎么 RE 了?原来是 fenwick 数组开小了,但是 \(8 \times 10^4\) 为什么 TLE 了?不应该啊。随便造了几组能卡满的数据都只跑了 0.1s,大概还是数组开小导致的奇怪问题吧,不管了,数组开大再交一发就行。
现在手上大概有 \(97 + [41, 75] + 66\) 了,感觉不算低。不如先把 T2 的单峰性质给拼上,再多拿到高贵的 \(7\) 分。T3 似乎没啥好看的了,那去看看 T1 到底是啥 B 问题。原来 \(K\) 应该和 \(\log \frac{nc}{\epsilon} \approx 80\) 取 \(\min\) 啊,随便改几下就行了,小问题。
接下来的时间,基本就是想想 T2,再想想 T3 了吧。明显 T3 更有意思,然而子任务类型 C 好像根本不会的样子。这玩意不允许有环因此不存在锁存,而且没有时钟信号,好像不是图灵完备的,大概无法做到寻址了吧。看看字符串固定时能不能在 Alice 或 Bob 身上做点手脚?也以失败告终。
比赛结束前最后的 10min,已经准备收拾东西走人了,queue 了 1h 的 T3 总算出结果了,有 \(66\),很好。T2 也测出来了,我差点心肺骤停。\(53\)!\(53\)!\(53\)!他妈的 \(\mathcal O(n \sqrt n \log n)\) 过不了 \(8 \times 10^4\)?我本机卡满了才 0.1s 好不好。那叫一个绝望。
疯狂卡常,疯狂卡常,各种能想到的剪枝优化都加上了,最后 5min 狂交 4 发,最后一发还差点没交上去。然而比赛已经结束了,狂砍 4 发 Waiting。
想骂人,这 APIO 赛制什么鸟玩意,去年还办的挺好的,今年又炸。达子来找我说他 \(266\),碰到的人都说自己不挂分有 \(266\)。难道大众分 \(266\)?我直接打铁预定。出来大家都在骂。走之前特地记了下 apio2023 解析出来的 IP 地址。
回到房间摆,酒店门口怎么在开相亲大会啊,还拿个喇叭在那儿喊,吵死人了,真想冲出去大喊「你们这群傻逼能不能安静一点啊」。打了半个下午的 mc 才意识到原来今天是 5 月 20 号,怎么我一个人过?怎么 qq 空间里全在秀?有点悲伤。怎么还强迫我听相亲大会?傻逼。
拿自己电脑登录了比赛网址,T1 的最后 \(3\) 分没拿到,傻逼。T2 还在 Waiting,有希望,但不多。
再过 1h 继续查分,所幸 T2 有两发 \(75\),这样就是 \(97 + 82 + 66 = 245\) 了,很低,但不是很低。
国家队交流会,主持人竟是魏老师,orz。