2022ICPC沈阳区域赛游记

活学活用,论“批归一化”在算法竞赛中的运用

Posted by ethan-zhou on November 7, 2022

热身赛 rank 2,大概是 rp 全都给热身赛了吧。。。(虽然热身赛是纯拼手速和想题速度)

感觉这场区域赛区分度极低,四题有一百多队,五题有二十多队,而区分了不少队的 A 题也没啥思维含量,本来是个好想好写的问题,结果出题人生硬地加了一个单点,让代码变的繁琐不少。而除了这五题之外的题都比较有难度,做出来的不多。

最后五题 rank 27,金牌靠后,发挥略低于预期,不过也没啥影响。

上来发现 15 秒就有人过了 D,于是让 wky 看看 D, 在 6 分钟签到成功。

然后又发现 C 过了好多人,于是我就开了 C,简单分析发现 $l$ 和 $r$ 一定有一个卡着某一个 $A_i$,于是写了个 $n^2$ 暴力迅速通过。

然后就卡住了,我负责开的 E~H 都没有什么思路,尤其是 F,是我最不会的构造,手玩了半天也没做出来。玩的时候,wky 说 A 是个积分题,于是我去看 A,wky 开始做构造 F。

在算 A 的时候,wky 说他会了 F,遂跟我讲了个构造,讨论 $n$ 和 $m$ 模 $4$ 的余数之后,可以二维问题转化为一维问题,然后可以贪心解决。听完之后,我深感这不是我想的出来的构造,同时觉得 wky 最后直接贪心的有点小瑕疵,但是 wky 觉得很对,于是上机写写,一交,挂了。

于是 hwj 就先上机写 L,又因为没有打印机,只能电脑屏幕分成两半,一半写代码,一半给我们静态查错。

又跟 wky 讨论了一下,wky 似乎也明白了贪心的小问题。于是再次上机写了一下,结果样例过不去,又开始调试。看着 wky 调试的我此时已经急急急急急急急急了,于是就以迅雷不及掩耳盗铃儿响叮当猫之势把 wky 赶下电脑,调了调 wky 的代码,wky 又声控我改了一些代码,最后在 92 分钟通过。

此后 hwj 继续调 L,我则继续算 A 的积分。后来 hwj 的 L 写挂了,过不去样例,此时 A 的积分我也算的差不多了。于是我便上去写 A,hwj 静态调试 L,写了一阵,发现 A 的积分算的有点问题,于是又让 hwj 接着写 L,我重新算了一下 A。

最终,hwj 在 171 分钟调过了 L。

我又上机改 A,很快过了样例,一交,告诉我格式错误???我百思不得其解,想了一会,突然意识到可能 nan 或者 inf 了,于是又在输出答案之前 assert(!isnan(ans) && !isinf(ans)); 果然 RE 了。

然后我就开始想哪里会导致 nan。原来是因为我懒得特判单点,把单点当成一个长度为 eps 的小区间,之后,又有某个地方是用 x 坐标(范围达到 $10^9$)除以这个 eps,于是就蹦出来一个 inf,之后又有一个地方出现了 inf-inf 最后答案就变成了 nan。

然而这时候感觉如果要改成特判单点将会非常麻烦,就想着乱搞。队友提出可以自适应调节 eps ,因为题目要求的是相对误差小于 $10^{-10}$,所以在 x 坐标范围比较大的时候 eps 可以设大一点,x 坐标小的时候可以设小一点。但 hwj 又提出万一 x 坐标都很大,但是极差很小,最终答案的量级还是很小,就会出问题。

我不仅回想起了前一阵手写神经网络的时候学的 Batch Normalization,提议把 eps 固定,然后把输入进行归一化(减去均值除以标准差)最后输出答案的时候再乘以标准差。hwj 又提议说直接除以方差就可以了,我们的神奇乱搞就诞生了。

一写,效果竟然还不错((几个极限数据都在精度范围之内。可惜最后一交还是 WA 了,后来又试了一些乱搞,然而还是没过。

最后还是老老实实写的特判单点,惊奇的发现代码没改多少。不仅十分懊悔,刚刚乱搞半天搞了个寂寞。。。最后在 211 分钟通过。这次乱搞不仅让我温习了神经网络的相关知识,还活跃了队伍气氛,让我们获得了 5 发罚时和 40 min 的卡题,可谓是收获满满。

然后就进入了罚坐时间,我们仨啃着肯德基的炸鸡腿,分别对着 E,G,I,H 苦想,中间提出若干假算法。在离结束还有 40 分钟的时候 hwj 说他会了 H 的 pam 做法(又是我没听说的算法),于是开始冲,可惜最后没冲出来。

在最后一分钟交了一发,发现前面有 900 多个提交待评测,看来大家都在绝杀((

感觉这次题目没啥区分度,而且考的知识面太窄,正好没有一个是我们擅长的。这次失策是 I 没有搞出来,思考的时间也不太够。

只能寄希望于下周的西安区域赛题目比较对我们胃口吧。


作者:@ethan-enhe
本文为作者原创,转载请注明出处:本文链接


阅读量:


icon