ICPC 区域预选赛总集篇
阿伦代尔, 美国
梦开始的地方。
旅程
从参赛选手到教练,再到裁判,一不小心参加了十多年的 ICPC 世界总决赛。
2012年 – 2025年9月4日 · 阿伦代尔 · 叶卡捷琳堡 · 马拉喀什 · +6 · 9 篇日志
阿伦代尔, 美国
梦开始的地方。
叶卡捷琳堡, 俄罗斯
第一次参加总决赛,两题收场,惨败而归。
马拉喀什, 摩洛哥
第二次参加总决赛,做完了所有简单题,略有遗憾。
拉皮德城, 美国
第一次以教练身份参加总决赛。
北京, 中国
第二次以教练身份参加总决赛。
亚特兰大, 美国
参加第一届北美总决赛。
卢克索, 埃及
第一次在现场以裁判身份参加总决赛。
阿斯塔纳, 哈萨克斯坦
参加一年一度,今年三度的总决赛。
巴库, 阿塞拜疆
巴库总决赛多日游。
梦开始的地方。
2012年
一切都要从2012年的预选赛说起。我能参加这个预选赛,也是挺巧的。
我从高中的时候开始学计算机竞赛。当时也是非常巧,教竞赛的老师来我们班宣传,举的例子都是大神通过学习竞赛、参加国际比赛,最终拿到几万美元全额奖学金、被普林斯顿大学录取的故事。然后我们当时省级联赛报名费大概是30块。于是,这件事情被他一句话总结成了:交三十元,挣三十万。
然后我就去学了,然后就学进去了,然后就拿到了全国赛银牌,然后就保送去了上海交通大学。
能去上交的都是什么水平的人,我心里是有数的,比我那是强到不知道哪里去了。而交大的 ICPC 校队,那更是拿过数次总冠军的超级强队。所以当时上大学的时候,完全没有继续参加比赛的想法,因为肯定没戏。
事情的转机出现在了我2012年来到美国的时候。我上的是一个2+2的项目,在上交上大学前两年,在美国密歇根大学上后两年,然后能拿到两个大学学位。于是我大三就来到了美国。而密歇根大学刚刚好在2011年总决赛成绩极好,以第二名的成绩拿到了金牌,刷新了学校最好成绩。然后这个事迹就被做成了大字报,张贴在了我们计算机系主楼的大厅里。
我本来只是看到了,并没有在意。但是我的室友发现了商机。他心想,上交很强,但是密歇根大学不一定啊。于是他仔细调查了一下,发现2011年总决赛(也就是2010年区域预选赛晋级的队伍)密歇根大学强,完全是因为学校里有一个大神(这个人后来退役成了我们的学生教练),还有一个来一个学期的交换生大神(曾经是中国 IOI 国家队选手),这两位撑起了整个队伍。而那两位之后都已经没有继续参加总决赛的资格了。这两位下了之后,学校直接报废,2012年连总决赛都没进。
然后我室友去读了2011年区域预选赛的题目,然后看了2011年的成绩,然后得出结论:我上我也行。
因为这比赛需要三个人组队,于是他就找到了我。他用一句话就打动了我:“你不想圆梦了么?”
然后他掏出了2011年比赛的题目,说,你看这个题,大水题,你再看这个题,还是大水题。然后我们连看了6道题,都是大水题,然后他说,你看,这不就晋级了。
然后我就加入了。
今年的选拔可谓是一波三折,然后折了。
在校内选拔赛之前,我们发邮件问教练,说这队伍是怎么分配的。我们俩想一队,现在能绑定么。他说不行,为了公平起见,要严格按照排名,前三名一队,然后再三名,然后以此类推。这岂不是还要控分?
但是其实没什么好控分的。在正式选拔赛之前的所有训练赛,我俩都是前二。这有什么控分的必要么。
结果选拔赛的时候炸了。因为之前表现过好,我室友有点过于大意了。他中场的时候在一个难题上花了太长的时间,导致很多简单题没有做。更严重的问题是,这选拔赛在一个周末,分两天进行,你可以随便挑一天。我们都在第一天,然后他在第一天即便如此还是一直排第二,感觉问题不大。然而第二天的时候,突然冒出两个拦路虎。这两位之前的训练从来没来过,压根不知道他们的存在,然后就轻易把我队友超过了。
然后就爆炸了。看这架势我要跟那两位组队了,那两位也都是中国留学生。我是没什么关系,而我室友就非常蛋疼了。这就跟网上最常见的,你叫你朋友陪你去试镜,结果只有你朋友选上了一样。
然后这个比赛结果,我第一,7题,然后两位6题,然后是我室友4题。这个结果差距有点大,怕是很难质疑,除非那两位有人主动退出。
然而最终也没人退出。于是我跟那两位组了队。这两位,我称之为读题队友和酱油队友。读题队友是我之后两年参加总决赛的读题队友,而此时的他跟读题还没什么关系,还是需要码题的。
另一位酱油队友,那可是大有来头。据说在高中时,他名气非常大,跟曹钦翔齐名。曹钦翔何许人也,那可是2008年中国全国青少年信息学奥林匹克竞赛冠军。能跟这位齐名,那得有多强。
然后他就坑爹了,坑了个大爹。
今年区域预选赛之前,我们听说,我们赛区会有一张外卡。本来我们赛区能进三个队,算上这张外卡能进四个。而我们赛区,前三的强队非常强,卡耐基梅隆、滑铁卢大学,以及多伦多大学,前两位经常光顾总决赛奖牌区附近,最后这位,听说我们那年队里有个 IOI 国家队选手。
总之这三位是非常强劲的。不只是在我们赛区,放眼整个北美,那也是数一数二的强,滑铁卢和 CMU 经常能在总决赛拿到北美冠军。后来 MIT 有不少很强的中国竞赛选手加入,北美格局才明显发生变化。
从那几年总决赛的整体表现看,北美赛区在总决赛,算是比较弱的赛区,比非洲、阿拉伯地区和南美洲强,而跟欧洲、亚洲的队伍平均水平完全不在一个档次。也就是说,我们几个,算是在一个弱区里的一个最强区。
然而这并不要紧,因为今年有外卡。所以把他们三个排除,那就只剩下我们了,剩下的学校当年队伍的实力基本上没法看。
所以我们队心态很放松,唯一一个紧张点就是,这个第四名一定要保住。然后我们就跟着学校组织的训练稍微练了练,没做什么额外的训练。毕竟,我跟这两位当时也不是很熟。
然后到了比赛日。总共九道题,其中前八道果断都是水题。不过水题是水题,代码量要求还是稍微有一点的。以总决赛的眼光看,这代码量约等于没有,但是我们当时代码水平也就一般,然后在水题上花了不少时间。CMU 用了一个半小时就把前六题做完了,三小时左右8题,封榜之前就退场了。
而我们队,我和读题队友用了四个多小时,艰难地码完并调对了前6题。而在这期间,酱油队友上来就看了最后一题,也就是最难题。这里要提一句,一般情况下,题目不是按照难度排序的,而这次碰巧最后一题就是最难题,而碰巧酱油队友就是按倒序读题的。
那题是一道几何题。但凡我们当时有点眼界,就应该知道,在区域预选赛,这种几何题只要出现基本上就是防退场了。然而我们的酱油队友,对自身实力那是相当的自信,说这题可做,应该不难,然后就上了。他从几乎是开场就码好了那个题,60多行的程序,一直到比赛结束都没能调对。那是啊,能调对就有鬼了。官方解法足足两百多行的分类讨论,你这60行就要混过去,怕是难度很大。
然后这个题前期就浪费了我们很多电脑时间。到了比赛中期,酱油队友觉得不能再纠结这个几何题了,决定换一个题,然后他继续读题,读到了第七题。这个题也是个水题,我记得就是个普通的汇率换算,然后求个最短路。唯一的坑就是,你不能用实数操作,精度误差太大,过不了,你得用64位整数维护分数。然后酱油队友上来就用了实数,然后又炸了。
一个小时之后,读题队友意识到了不能用实数,决定用分数重写。然后他重写了,然后又炸了。最终,我们也没能调出这两个题。赛后,我们发现,这题就差一个初始化,有个数组没有初始化,结果炸了,只要开始赋值为0,这题就过了。
然后最后一个我看都没看的题,也就是第八题,是一个简单网络流。我但凡看了这个题,就能做出这个题。然而现场压根也没给我机会看。电脑时间都用来调剩下两个题了。
最终我们6题。CMU 退场了,滑铁卢和多伦多也是在三个小时前后就8题了,不过最终没能退场。
赛后总结,酱油队友忽然发现,他这场比赛等于是啥事没干。写了两个题全挂了,对比分零贡献,还花了很多电脑时间。
然后我室友在二队,他比赛的体验更差。他有个队友是美国人,这人的名字用中文谐音,听起来就不太聪明的样子。这场比赛之前,我们没什么特别的感觉。而比赛之后,我队友非常生气,从此之后我们称他为人如其名。
比赛的时候,我室友知道他们队就是纯打酱油的,所以压根也没好好比,很多时间都是在哄着人如其名写代码。然后他就被人如其名的代码能力震惊了。那真是说啥算法都听不懂,写啥代码都写不对,让人看着就揪心。
最终,我们全场排第八,前面四个 CMU 队、两个滑铁卢队、一个多伦多队。看这排名,感觉如果我们晋级了,也是挺尴尬的。
而后,经过了一个月的漫长等待,我们得到的结果是,我们没能晋级。理由是,其实我们赛区本来只有两个晋级名额,第三已经是外卡了。而我们赛区就是因为强,所以年年都能拿到外卡。但是第四就别想了。
祸兮福所倚,福兮祸所伏。只能说还好我们没晋级,不然就成了纯粹去总决赛打酱油的了。这次比赛之后,酱油队友已经到了年限,没法继续参赛了。我、读题队友,还有我室友,也就是数学队友,决定好好训练,认真比赛,不把总决赛当成纯旅游了。
不好,怎么一下子就卷起来了。本来只是想去旅游的,怎么一下子就有梦想了。
而当时的我肯定是想不到,我跟总决赛的缘分远不止于此,将来那可是福泽深厚的。
这个赛季的后半段,也就是2013年初,我们三人还有学校的一些其他人,一起参加了很多训练。CMU 的学生教练是我们学校学生教练的好朋友,他俩都是 USACO 委员会的成员。这就导致我们经常能去 CMU 参加集训,有的时候还能遇到美国 IOI 国家队选手同台竞技,然后被暴打。虽然我们三人当时组队还没参加过任何正式比赛,但是非正式的比赛已经参加了不少了。而非正式比赛的问题就是,我们分工着实是很随意,谁想上谁就上了。当时的我们,还没有什么读题队友和数学队友的区分。
翻找十几年前的邮件,找到了当年副领队发的远古时期的照片一张。
2013年
时间来到2013年,又到了控分的时候。此时,我们三个人已经经过了大半年的正经但是不刻苦的训练,基本功已经比去年强了不知道多少。
今年会有什么拦路虎呢?不知道。事实上,确实也没有。以我们对学校的了解,就不应该有。我们三个好歹都是中国省级联赛一等奖水平,对上上大学才开始学编程的人,打比赛没有任何道理会比不过的。
预选赛有惊无险地通过,我们是前三。其中有个手速飞快的新人令人印象深刻。总共七个题,他飞速码完了3题,比我队友都快,十分吓人。但是他也就是手速快了,最终他也只能做出4题,而我们都至少是5题。
然后到了比赛日。我们的目标是晋级,而教练的目标是干掉滑铁卢。这个目标源自于,我们学校虽然在总决赛拿到过亚军,暴打了滑铁卢,但是在区域预选赛从来就没赢过滑铁卢。而滑铁卢非常强,所以教练一直以这个为目标。
比赛时,依旧采取的是随机码题的策略。读题队友码了至少两个题,在自己找到了天坑 bug 之后,把那道模拟题过了。数学队友看着比赛的最后一题,I题,是一道水题,一直在纠结,这题运算过程中会不会超过18位整数,需不需要高精度。直到我们看到同校的其他队伍通过了这道题目,我们确定这题不需要高精度,因为他们啥实力我们心里门清,他们铁定不会高精度。然后他上了,光速通过了这道题目。
中间有一道几何题,G题,我们看一眼就直接撕了。什么玩意,这是人能做的么?结果确实是,撕得好啊。那题标程将近300行,别说是我们了,后来这比赛被放到了 Codeforces 上,全世界全部大佬都可以来尝试。十年过去了,也没有人能在5个小时之内把这题给过了。
这场比赛,最大的波折来自中间那道网络流,E题。那个题,作为网络流,建模本身就已经不简单了。读题队友和我想出这个题的做法的时候,都大呼过瘾。然后我们把代码敲完,提交,然后果断超时了。然后我们加入了对结果的二分,优化掉了一开始的线性查找,然后提交,然后还是超时了。
这个超时超得感觉还是挺多的。我们每次提交,要五分钟之后才能收到结果,感觉运行时间确实很长。
这个时候,我们已经不知道要怎么办了。我们知道,如果用线性查找,你可以每次不用新建图,而是在原来的图的基础上,找一条增广路就可以了。然而我们不会写。我们只是理论上知道可以这样。这大概就是这题的正解了。
在比赛结束之前12分钟,我们没招了,进行了一些瞎搞的优化,以及一些常数优化,然后疯狂提交。因为每次测评都要好久,我们这些提交直接全部卡住。
最终,我们在比赛结束前大概五分钟,通过了这道题目。通过的提交是7分钟之前的提交。那个时候,我们已经提交了不知道多少次,都卡在测评机里了。看到那个通过的弹窗的时候,我们三人集体叫出了声,现场大概全场都听到了。然后,场上开始有人鼓掌,然后更多的人开始鼓掌。于是我们就收到了来自很多全场其他选手的掌声。
感觉环境也是很友善了,他们甚至都不知道发生了什么,封榜之后,通过的提交是不会显示的。
最终,我们以7题的成绩(跟第一并列题数),以第二名的成绩晋级。然后,我们干掉了滑铁卢。我们不止是赢了滑铁卢,我们把他们挤到了第四名,让他们连总决赛都没进,可以说是干得非常彻底了。后来我们发现,就算最后那道题我们没过,我们依旧能晋级,而且学校顺位还是第二名(学校顺位就是每所学校只看成绩最好的那支队伍之后的排名),可以说是相当稳了。
然后就是今年的训练,跟去年大体上一样,没什么特别的训练,就是有空的时候就团队练练,没空的时候自己练自己的。我和读题队友一起选了一门研究生的算法课。对于绝大部分人来说,这课非常难,属于是研究生阶段能上到的最难的课之一了。后来我博士期间,当过那门课5年的助教,更是深入了解了这一点。
然而当时,我和读题队友是把那门课当水课选的,上课的时候,我们就在教室后面讨论总决赛题目,课基本没听过,最终俩人双双 A+。
这个赛季,我们还去参加了北美邀请赛 NAIPC。这个比赛的前身是去年的芝加哥大学邀请赛,现在正式改名为北美邀请赛。这不是官方赛事,跟晋级总决赛无关,就是邀请了所有北美晋级了总决赛的队伍来比一场。这个比赛后来在北美赛制重构后,逐渐演变成了 NAC,并正式进入总决赛晋级体系。
当年的 NAIPC 那是相当的奢华。比赛场地是一个大型图书馆阅览室,内部看起来超级像霍格沃茨。邀请大家到现场比赛体感非常好,奖金也很高。他们要把比赛奖池做成总决赛级别,冠军12000美元,第二名6000美元,银牌队伍3000美元。
最终我们以第四名的成绩,拿到了银牌,喜提3000美元奖金。这是我参加竞赛,人生中第一次,也是唯一一次拿到奖金。我们也是赶上好时候了,这比赛接下来的几年,奖金池直线下滑,后来已经演变成金牌给250刀亚马逊代金券了。合着你们第一年就把未来十年的预算都花光了是吧。
总共21个队,我们赛区三个晋级队,分别拿到了3、4、6名。由此可见,我们赛区在北美,那是真的强啊!
比赛具体的情况我已经不记得了,就只有印象中,我们在三个小时左右通过最后一道题目之后,就啥也不会了,然后打了两个小时的酱油。
然后在总决赛之前,我就回上交毕业去了,两个队友留在美国。然后就没有然后了,我们并没有什么正经的训练。
2014年
新的赛季开始了。我们吸取了去年总决赛的教训,必须要好好训练。这也太划水了!
不是,怎么越来越卷了。
果然人类的贪念是没有止境的。当你拥有了之后,你只会想要更多。谁能想到,我们一开始就单纯地只是想去总决赛旅游的,现在开始想拿牌了。
今年的选拔赛出现了新的情况。今年我大学毕业了,开始读博士。问题是,跟我一届的上交的都毕业了,其中好大一波人来到了密歇根大学读研或者读博,其中不乏一些非常强力的选手。然后更严重的是,数学队友经过调查,发现今年从国立台湾大学来了一个研究生,这人超强,在总决赛拿到过金牌!他 Codeforces 红名,我们称他为红名大神。
这完犊子了啊。红名大神要是参赛,我们仨人铁定要挂一个。
不过还好,在比赛的宣讲会上,我们遇到了他,得到了他已经没法再参赛了这个消息。于是我们松了一口气。
最终,从上交来的强人,都没有参赛。我们三人继续顺利地包揽前三,成功组队。
今年的预选赛,风不平浪不静。结果倒是没有任何悬念,但是过程令人蛋疼。滑铁卢大学在去年遭遇了重大滑铁卢之后(他们应该是有个超长时间连续参加总决赛的纪录被我们打断了),痛定思痛,今年卷土重来,誓要报仇。最终他们8题拿到第一。之后两个学校7题。而再往后就是5题了。前三的学校断崖式领先,根本毫无悬念。
比赛过程略显惊悚。也不知道这次的命题人在想什么,学什么不好非要学去年总决赛的超难命题风格。开场20分钟,全场鸦雀无声,没有任何题目通过。别说预选赛了,这在总决赛都不正常。滑铁卢冠军队第一次正确提交出现在42分钟,亚军队还有我们队的第一次正确提交都出现在一个小时之后,这合理么?这也就是说,本场比赛是中档题起步的,压根没有简单题。全场22名之后只过1题,42名之后直接挂零。普通的队伍,这场比赛的参赛体验可以算得上是非常糟糕了。
这场比赛没有什么令我印象深刻的题目。我是后来又重新看了题,才发现最后那个几何题,I题,出得相当的好。它需要先用计算几何做预处理,然后用网络流求解。这是个正宗的总决赛级别的题目。当然,现场我们基本是看完就撕了。结果滑铁卢在封榜之后通过了这道题目,这个冠军也是实至名归了。
我们拿到第三,有点小慌。因为讲道理我们赛区还是只能晋级两个队,第三是外卡。但是看这成绩,外卡怎么着都能轮到我们赛区吧。
最终还是有惊无险,顺利晋级。
今年我们依旧参加了 NAIPC,以第六名的成绩拿到了银牌。不过今年的奖金,就已经跟去年完全没法比了:每人150刀亚马逊代金券。怎么感觉这个比赛办了一年就破产了啊。
今年我们做了好多好多训练,希望能在总决赛拿到好成绩吧。
2016年
去年没有继续参与比赛。主要是去年我们的学生教练还在。他继续当教练,就没我什么事了。今年不一样了,这位大神博士读到第五年,决定不读了,直接放弃然后去创业。
我当时反正是极其震惊。在中国人的观念里,这种行为怕是完全无法被理解。你都第五年了,就快毕业了,然后跑路了,你图啥呢。就算是再不开心,你坚持坚持,很快就能毕业了啊,不然沉没成本也太高了。
然而美国人不管你这个那个,随性,想怎样就怎样。于是他就去创业了。
然后我们学校就剩下一个烂摊子。要知道,学校的教授们,也就是领队和副领队,一般是从来不管学生训练的事情的,都是学生教练带着练。他走了,这个真空期就留下了,然后我就上了。感觉我这也是临危受命了。
今年我为我们学校可谓是操碎了心。首先就是找人参赛。去年的时候,我们三人都退役了,结果我们学校区域预选赛的成绩果然惨不忍睹。二队成绩最好,第12名,然后是三队,然后是四队。而一队直接被干到了30名开外。也不知道这个预选赛是怎么选的。由此可见,这个严格按照名次排名的预选赛,也是可以出大幺蛾子的。
因为知道了我们的人才库里没有人才,我只能自己找。今年暑假,我是一门入门算法课的助教,我给当时所有最终名次靠前的学生全部发了邀请,请他们来参赛。以我的眼光看,这些学生的竞赛水平怕是不会很强,想要晋级怕是非常困难,但是聊胜于无吧。
然后学期开始,我准备了练习赛。然后我依旧是按照顺序,联系了每一个排名靠前的人。然后我还在我的上交学弟里,挖掘出了一个有竞赛经验的选手,想方设法,一顿忽悠,总算是让他来参赛了。
最终,还真让我找到了三个有竞赛经验的选手。他们都在中国拿过省级联赛一等奖,实力应该能支撑到晋级。
然而现实总是啪啪打脸。且不说他们这个队最后以极差的代码能力未能晋级,他们连预选赛那关都没过。
这三个人,在练习赛的时候排名一直是前三,这让我放松了心弦,然而正式预选赛的时候,出现了大幺蛾子。
有美国两兄弟,是亲兄弟,我称他们为美国大哥和美国大弟,两人分别冲到了第一和第三。跟2012年我们的情况不同,这俩人练习赛就一直都在,排名一直还行,但是从来没冲到过这么前面。这次感觉是正式发力了。
然后我这三个小弟排名来到了2、4、5。这就很尴尬,要怎么组队呢。他们三个的想法,肯定就是三个人自己组队。尤其是其中有个人英语口语奇差,他要是跟外国人组队了,那怕是对方都要难受死。
然后我们就开始了跟领队的拉锯战。领队坚持要前三组队,然后我说建议听一下队员们的意愿。然后就开始拉扯。拉扯了好多个回合之后,最终领队说,要问一下美国两兄弟的意愿,他们要是同意,那就没问题。
然后美国两兄弟同意了。我个人的感觉是,他们可能也无所谓。按照以往的成绩,这次排名靠前就已经很意外了,至于后面晋级总决赛什么的,当时大概是想都没想过的。
最终,排名1、3、6的选手组成了一队,2、4、5的选手组成了二队。
这个时候,另一个重要人物进入了我的视野,就是排名第六的这位选手,我称之为香港记者。这位也是个中国人,在香港上大学,这个学期来我们学校做交换生,就一个学期。之所以叫他记者,是因为这个人消息极为灵通。关于竞赛的八卦,你问他什么,他全都知道。正应了长者那句:你们有一个好,全世界跑到什么地方,你们比其他的西方记者跑得还快。
选拔赛后,他主动联系我,问我有没有什么训练技巧和一定要学的算法。他上大学开始接触编程,这个学期才刚刚开始接触竞赛,底子算是很薄了。我说,速成的方法我这里还真有。我这么多年在我们赛区参赛,我们赛区的题目是什么风格那是了如指掌了。我知道,这些年几乎每场比赛都会有一道网络流,而且这些年的题目越来越简单。为此,我还特地在选拔赛放了两道网络流,为的就是找到能做网络流的人去参加比赛。
我跟他说,别的算法你都不用管,你就给我专心研究网络流。
结果就是,这个建议真的是帮了大忙了。美国两兄弟都是完全不会网络流的。最终他们队正是香港记者做出了那道网络流,使他们有了足够多的题数,然后才能在比赛最后10分钟极限翻盘,以第二名的成绩晋级总决赛。否则,他们大概就要十名开外了。
不过,当时的我其实更多的精力都放在了二队身上,主要还是私下里叫起来方便,你什么时候叫他们来听训,他们就会来。一队的话,大概就只有正式训练的时候才会来。
这三位的代码能力,着实是令我震惊。有一次我的助教答疑时间,没有人,我就把他们摇过来练一下基本功。就是一个朴素的单源最短路。然后我就碎了。都是省级一等奖选手,你们是如何做到一个半小时连最短路都写不对的。这不禁让我怀疑,莫非我第一年参赛的时候,也是这个水平?
然后他们各种练习赛,各种水题调不对,我各种无语。最终,正赛的时候,果然还是因为代码能力实在是不过关,简单题写不对,让一队给完爆了。
有一说一,这个美国大哥的代码能力超强,手速超快。根据香港记者的说法,他写代码不只是手速快,代码结构也非常严谨。他严格遵照 OOP 写代码,所有东西都建好类,而不是散装函数和全局变量。这在竞赛圈非常少见,因为这样会导致代码量增加,影响速度。不过他这么搞的好处是显而易见的,一旦出了错误,找错误会比散装函数的代码简单很多。
于是我们一队就顺利晋级了,我十分激动,又能去总决赛旅游了。然后我们知道了总决赛地点在美国。然后我很失望。
香港记者第二个学期就回香港了,我们属实是没怎么训练。后来听说,他们在网上也练过了,但是那个效果么,懂得都懂。当年我在交大的时候,我们也声称练过。
除去香港记者,剩下人都还在。因为他们的算法基本功实在是太差了,或者说基本上就是没有,我决定开一门小灶,给大家讲算法。
这纯粹就是为爱发电了,因为上这个课我没有任何收益,纯粹是帮助小朋友。我的本意是让美国两兄弟恶补一下算法。你们好歹晋级总决赛了,常用算法不能啥也不知道啊。
结果这个时候,另一个人走进了我的视野:美国二哥。他在这次预选赛里排名第七,在三队里当领头羊,不过看这架势他肯定是不满意的。
主要是为美国两兄弟准备的课,这两位来了大概6成吧。倒是这位美国二哥,每次都来,你想不记住都不行。最重要的是,因为我讲的速度实在是非常快(因为时间有限,需要讲的东西非常多),导致大概三四周之后就没什么人了。有一次,美国二哥是唯一一个来的人,我对着他一个人讲了一场。
然后就这么讲了一个学期,感觉把我会的东西全都传授给了美国二哥。也不知道他学会了多少。
2017年
转眼又来到了一个新的赛季。
跟去年一样,我继续到处摇人。不过,今年我对这几位美国选手还是有一些信心的,尤其是在美国二哥学会了很多算法,以及美国大哥据说手速又精进了之后。
宣讲会上,我遇到了两个人。这两位从北京大学毕业,来到我们这里读研究生。跟去年那三位不一样的是,这两位都曾经是北京大学校队的选手。虽然都不是一队,但是好歹进过二三四队。简而言之,不只是有竞赛经验,而且有正统的 ICPC 竞赛经验,手速什么的应该是能保证的。这一下我就来劲了。要知道,我在交大怕是四队都进不了,你现在来了北大二队的,那至少打个区域预选赛应该是手拿把掐的啊,我应该都根本不用管他们。
事实上,我也没管他们。
到了校内选拔赛的时候,这两位居然集体翻车了。我个人觉得这次我预选赛题目出得非常好。所有题目都有至少两个人通过,而没有人通过所有题目,冠军是9题,总共12题。这已经是能想到的最完美的比赛结果了。
唯一一个遗憾就是,中间有一道数学题,那个题我可能不该把它放入比赛。我本来觉得它的推导过程极其巧妙,就把它放进来了。而实际上达到的效果就是,你要么本身知道结论,秒了,要么不知道结论,完全无从下手,根本没有人现场推导。这就十分糟糕了。
这场比赛因为题目够多,区分度够大,导致比赛非常精彩,你不到最后一刻根本不知道会发生什么。我邀请了数学队友一起网上观战,结果就是看到比赛最后30分钟各种惊天大逆转层出不穷。先是美国二哥凭借着扎实的算法功底,在倒数15分钟,以9题冲到第一,然后是美国大哥在倒数4分钟,想出了上面说的那道数学题,以8题的成绩冲到第二。在那之前,我们都在说,都怪那道数学题,要是给美国大哥卡出了一队多可惜,结果最后他凭实力翻盘。
然后就是前三名,美国大哥、美国二哥,和一个新来的没见过的美国人,我称他为美国小弟。而这两位北大选手位列第四、第五。主要还是罚时太高了,以及我那道数学题可能确实坑了。感觉美国人都知道,但是这两位都不知道。如果没有那道数学题,这两位都能进一队。
现在这个队伍构成,我还是非常满意的。一队有美国大哥和美国二哥坐镇,区域预选赛层面实力还是能保证的,美国小弟是什么实力不是很重要。二队有这两位坐镇,第三个人不上都行。而且从选拔赛的成绩来看,前五名断崖式领先,第五名8题,第6名已经只有5题了。这样看来,这位确实可以不用上。
然后到了正赛,这一队果然没让我失望。美国大哥太强了,虽然题不是他读的,但是代码都是他写的。一个人一个小时14分钟码过了6个题,直接来到榜首。而后,虽然后继乏力,但是还是又过了两题,以赛区第二名学校的成绩,顺利晋级总决赛。
二队也不差,跟一队同题数,更高的罚时。如果没有一队,他们以全场第三学校的顺位,应该也能顺利晋级。
今年就不需要什么后续了。那两位北大选手跟我说,明年还要继续参赛,那我觉得明年已经稳了。
当我得知今年总决赛在中国举办的时候,我又无语了。行吧,完全是不给我免费旅游的机会。我就当是免费回国了。
2018年
转眼又到了一个新的赛季。
去年的两位北大选手都继续参赛。说实话,他们到底还能不能参赛,我们当时还进行了认真的讨论。一般认为,上大学超过五年的人就不能参赛了。我们后来仔细读规则才发现,有两个条件是‘或’的关系:满足入学年限条件,或者满足出生日期条件,都可能具备参赛资格。
然后我趁着去年在算法课上当助教的机会,又找到了一个选手。这位是上海交大来的博士生,是我的学弟,也有竞赛经验,但是没有 ICPC 经验。我觉得没关系,码题有那两位就够了,这位可以当只看题的那个人。然后这位也是我花了大力气忽悠进比赛的。于是,我又凑齐了一个国产三人竞赛队。今年总决赛地点定得很早,早就知道是葡萄牙了。于是我们四个人拉了个群,就叫葡萄牙旅行团。总决赛能比成什么样随便吧,反正区域预选赛能晋级就行。
然后预选赛的时候就出了大幺蛾子。这三个人,北大一哥、交大一哥、北大二哥,分别以8、5、4题,排位1、3、5位。这想要组一队难度可太大了,这要如何把第五位的北大二哥捞上来?而排名第二的是去年的美国小弟,6题。简而言之,第一名断崖式领先,剩下的人全是酱油位。
而排名第五位的这位,完全是咎由自取。他从比赛一个多小时开始,就跟全场最难题干起来了,一直干到比赛结束都没打过,一度质疑题目数据有误,然后当我跟他说了解法之后,他发现自己的方法不对。完全不知道比赛的时候他在想什么,哪有人这么打比赛的,真是气死个人。
于是北大二哥原地放弃,北大一哥、交大一哥、美国小弟组成了一队。然后我们葡萄牙旅行团正式宣布散群。
本来呢,这个一队努努力也是能进决赛的,结果在区域预选赛的时候,不知为何又犯病,简单题怎么都码不过。最终倒是拿到了赛区第三学校的顺位。然而当年第一的学校9题,第二8题,他们5题,然后官方直接把外卡没收了。
十分无语,他们这完全就是在跟自己战斗了。反正怎么打肯定都是第三,他们但凡发挥好一点点,说不定就拿到外卡了呢。
葡萄牙旅行团正式宣布解散。
至此,我的教练生涯也结束了。整个生涯,6次来到同一个地点参加区域预选赛,作为选手两次晋级,作为教练又两次带队晋级,也算是辉煌过了。
而此时的我还不知道,于我而言,总决赛的全新篇章,即将开启。
第一次参加总决赛,两题收场,惨败而归。
这是我第一次参加ICPC World Finals,心情十分激动。这个时候它甚至还叫ACM-ICPC World Finals。
比赛的晋级之路这里就不赘述了。年年都是在密歇根州的大急流城,详情可以参考预选赛总集篇。
这里我不禁想提一下,俄罗斯的签证是真的难办。在我去过的这么多的国家里,它的签证算是最难办的那一档。它要求你提交活动官方提供的邀请函,要原件。且不说这个活动官方得首先有资格提供这个邀请函,就是这个国际快递也够你喝一壶的。那个邀请函看起来非常正规,不是什么随便一个文档然后校长签个字就完事了的那种。它用的看上去是一种特殊的棕黄色纸张,上面都是看不懂的文字,有序列号,有你的名字,有签字,有盖章。然后这个东西要漂洋过海,国际快递从俄罗斯来到美国。别问我寄丢了怎么办,建议直接放弃。然后我们找了个旅行社来帮我们代办这个签证顺便订票。印象中这个签证直接收了我们每人三百多刀。还好有学校报销。
今年比赛之前,我人在中国,两个队友都在美国,基本没有训练。我们尝试了两次在线的训练,一边开视频会议,一边打码。结果就是,完全扯淡,毫无训练痕迹。在我回国之前,因为各自学业繁忙,我们全队只练过很少的几次,剩下的都是各练各的。用流行的话说,这叫裸考。
这次总决赛之旅从请假开始。我是万万没想到有朝一日会需要在大学里请假,而请假居然可以这么麻烦。
我在上海交通大学密西根学院,参加的是2+2的项目。大学前两年在交大,后两年在密西根,最后一个学期回交大参加毕设,然后能拿到两边的毕业证。你也可以不回交大参加毕设,这样你只能拿到密西根大学的毕业证。实际上,很多人都选择不回交大毕业,因为如果最终你要留在美国工作的话,回交大毕业几乎毫无意义,还不如用这个学期的时间在美国多参加一次实习,对找工作来说效果显然更好。这就直接导致了我们学院的毕业率一直极低,我印象中(大概不太准确)不到80%,几乎铁定是全交大垫底。
而现在的我正好就在交大参加最后一个学期的毕设。因为我的学分已经够了,所以这个学期只有毕设,没有其他的课。而我之所以选择回交大毕业,也是因为确实没想好以后到底要在哪里发展,所以还是先把两边的毕业证都搞到再说。话虽这么说,其实还是极大概率要在美国工作。于是我的心态其实极其放松,就算毕不了业,我也无所谓,就当回国跟同学玩一个暑假了。
背景介绍完毕。然后就到了要比赛的日子。众所周知,在大学你可以随便翘课。这不只是中国大学的传统,全世界大部分大学只怕都是这样。我在密西根大学也很少有教授喜欢点名的。而让我万万没想到的是,在一个可以随便翘课的环境下,请假好像成了十恶不赦的事情。
首先是为什么需要请假。本来我也没想请假,反正就一周两节课,直接翘课就行了。但是好巧不巧那周刚好是毕设第二次答辩,占最终总成绩的5%。当然,这点分我也不在乎,反正及格肯定是没问题。但是当我跟导师老大(毕设有好几个导师,其中的头)说的时候,他直接说,你不能不参加,任何一次答辩不参加毕设直接挂科。
然后我就震惊了。这5%的分凭什么就挂科了?翻遍整个课程的介绍、评分详解之类的所有文件,没有任何地方提及不参加其中一次答辩就挂科的事情。如果是最终答辩也就算了,但是这才第二次,后面还有两次呢。我完全不理解,这位导师为什么要做出这样的决定。以我浅薄的见识,我只能认为是我挑战了他浅薄的面皮。
我十分无语,只能说,我参加的这个比赛十分重要,是世界总决赛。如果我能正式请假,能放我过么。他说,如果是正式请假可以考虑。没办法,只能去请假了。
然后就是去找指导员请假。我已经不记得最终需要多少人签字了,好像是三个?但是首先需要得到指导员的认可和签字。然后我跟指导员说我要请假,去参加这个比赛。然后指导员的态度虽然比导师缓和很多,但是总体思路跟导师一样。大概就是,为啥要请假,毕设很重要,非去不可么,之类的话。然后我的态度很坚决,非去不可。主要是,上面我也说过了,我其实并不在乎这张上海交通大学的毕业证,对我来说大概率啥用没有,不要也罢。当然我没有这么说,但是这导致我明面上的态度非常坚决:非去不可。
指导员大概是见到我的态度非常坚决,以及我前两年在交大的时候以全学院第二的学分绩拿到了学术成就奖,“我是一个好学生”的结论深入人心,这才使得他最终松口,同意我请假。最后他跟我说,好好比,为校争光。
然而,我是代表密西根大学参赛的。上海交通大学校队那么强,哪里用得着我啊,而且我哪进得去啊。不过我显然没说。不知道他要是知道我都不是代表交大参赛,会是什么感想。
最终我请到了假,拿到了大人物的签字,然后去跟导师商量,导师最终同意只扣我5%的分,就不挂我的课了。
实在是太不容易了。作为一个I人,我感觉请这一次假把我这一年的社交份额都用掉了。
然后在没有后顾之忧,去参赛!
我从上海出发,只有我一个人。我的队友以及领队都是从美国出发。我上面也说过了,有很多人选择不在交大毕业,而用这个时间在美国实习。我其中一个队友就是这样。他的实习是标准的美国科技公司暑期实习,12个星期整。而总共就12个星期,他要请一整个星期的假,大概也是非常不容易的。在他的描述中,我也听到了“非请不可”之类的话。最终大概也是排除了千难万险,冒着拿不到最终offer的风险,拿到了这一周的假。
我的飞机要在莫斯科转机。倒不如说,你要飞俄罗斯的任何地方,大概率都要在莫斯科转机。转机过程还算流畅。只是在海关的时候,那人问我去哪,我说Yekaterinburg,他说Екатеринбург?我说Yekaterinburg。他说Екатеринбург?然后我俩就循环了。
我的写法就是当时实际发生的情况。我说的是英语,他大部分说的是英语,但是城市名用的俄语发音。而叶卡捷琳堡的俄语发音跟英语发音差别有点大,尤其是重音位置。我反正是没理解他说的是啥。
最终他好像是理解了我说的是啥,就让我过了。
顺利到达叶卡捷琳堡。然后到了宾馆,跟队友会合,然后我们仨人集体傻眼了。没人有转接头。
我们仨人虽然不是第一次出国(显然之前都去过美国),但是这次情况还是不太一样,毕竟美国要长期生活,转接头无论如何都要买。而这次大概是我们仨人第一次到一个真正需要转接头的国家,没一个人想着要带。
然后我们派了个代表,也就是我,去前台问有没有转接头可以借我们用用。然而当时的我英语也不好。当我先后说出了,socket,power,charger之类的词之后,前台笑着跟我说,我猜你想要的是adapter。说实话,我不知道adapter是啥,但是听着就像我要的东西。
然后我得到了一个转接头。然后我们全队三个人在这之后的一周,每天都聚在一个房间里,轮流充电。
我已经不记得那些天都干了啥了。我印象中,领队带我们去了城里的一些景点。但是具体是什么景点,完全没印象了。我们队里没有人懂俄语。其实我们队的副领队原来好像是俄罗斯人,但是出于某些原因去了美国。根据他自己的说法,他如果再次进入俄罗斯,就很难再出来了。他个人表述得很委婉,但是我理解下来大概就是这个意思。如果他在的话,也许我们能玩更多的地方吧。
然后终于来到了比赛日。这次的总决赛题目难度实属灾难级别。有谣言声称,是因为裁判们(也就是命题人)害怕tourist(世界排名第一的竞赛选手)会退场(就是比赛没结束就做完了所有题目),于是把题出得特别难。要知道在前一年,他的队伍差一点点就退场了。根据官方出的赛后总结,最难的一个题在临上场之前加了三个极端数据。如果没有那三个数据,他去年就已经退场了。
总而言之,不论谣言的真假,不论为什么题目这么难,这次的题目实属灾难级别。很久之后,当我自己成为了总决赛的裁判,知道了题目选择规则之后,我就更加无法理解这一年到底发生了什么。我问了很多当事人,他们都说:“那一年有什么特别的么,不记得了”。也就是说,那个谣言大概是扯淡的了,而在裁判心中,这只是一次普通的总决赛,无任何特别之处,仅仅只是题目难度翻车了而已。
说回比赛。
全场首杀K题来自17分钟。当比赛进行到15分钟,我们就已经发现不对劲了。往年的比赛首杀十分钟上下肯定出了,结果这次到15分钟还是全场静默。而当首杀出现之后,情况并没有好转,反而更加恶劣。正常情况下,首杀之后,那个题肯定是所有的队都在跟,一个小时的时候就已经大几十个队伍通过了。结果这次完全不是,几乎没人跟。而我们读了K,发现完全不会做,当即就沉默了。我们都认为这是一个数据结构题,但是我们都没看出来这题要怎么用数据结构。随便写了点优化,全场错了八次,也没能通过这道题目。这个题需要用到区间最值查询(RMQ)算法。然而我们队当时菜到,这么基础的算法都只是听说过,没人精通。于是硬是没人想到要这么做。
僵持的局面来到了第28分钟,有人通过了D题。然后我们读了D题,觉得可能可做。之前读的时候并不确定这题能不能做,因为这题也不是一眼看上去的水题,不过既然有人过了,那说明肯定可做。然后我的一个队友就去研究D了。然后一个小时之后,我们通过了D题。这是我们本场比赛通过的第一题。
第35分钟,有人通过了C题。C是个计算几何题,一眼看上去就是可做,但是情况特别多,很难通过的那种。我们全队都是计算几何菜鸟,遇到几何题都是我直接上去莽的。结果就是,果然这题情况特别多,一直到比赛结束,交了6次都没能通过这道题。本来我们以为,我们距离正解已经不远了,然而赛后我们从网上下载了我们的程序和官方数据一测发现,我们还差十万八千里。这题计算过程中全是实数,而最终的输出要求整数,这对计算几何精度的理解要求很高。在计算结果无限接近一个整数的时候,不同情况下,你要向上取整,向下取整,或者是近似,需要严格分类讨论。而我们三个计算几何小白肯定是不懂这个的。这题没有任何可能性通过。
第68分钟,有人通过了I题。我们读了I题,发现不会做。但是这次不一样。我们一看通过的学校,这是什么菜鸡学校,这也能通过I题?然后根据我们的经验,这题大概率可以瞎搞。我们也没想出什么有效的瞎搞方式,最终只能采用最暴力的方法:搜索+卡时。也就是说,程序只做暴力搜索,然后当它快要跑到时限的时候,直接退出并输出当前最优解,有啥输出啥。事实证明,这么做是对的。为了保险起见,我们在处理之前还随机打乱了数据的顺序,以防命题人以这种方式搞我们。我们前四次提交都是因为卡时范围没设好,提前过早退出之类的原因错了,调了一些参数之后,第五次提交,终于通过了I题。而最终结果证明,首杀I题的确实是菜鸡学校。他们全场只通过了这一道题。这在总决赛历史上只怕是前无古人后无来者,足以名垂青史了。
其他的有人通过的题目就跟我们没有关系了,看了题之后,主打一个,一看一个不吱声。
B题我们看完之后就知道,肯定是个背包动态规划,而且是需要那个多重背包优化的。而我们没人记得那个优化怎么做了。而事实上,这个题不只需要多重背包优化,你需要在那个优化思路的基础上,继续推导公式,做出新的优化公式。显然我们是没有这个能力了。
E题是最可惜的,我们看完之后完全没思路。而事实上,整个题目的逻辑跟有限状态自动机(DFA)的化简方式一模一样。而我和一个队友一年半以前才一起在课上学过,结果俩人愣是没一个人想起来。本来这题是天赐良机的,结果不知道为什么,比赛现场没想出来要怎么做。
我们还尝试做了A题。A题一直到比赛结束都没有人通过,包括场外队。我们之所以会尝试,主要也是比赛的时候,啥也不会,实在也是没事干。而这个题就是瞎搞的题目,跟算法没什么关系。于是我队友从比赛中期开始就一直在想这个题,一直到比赛结束想了三个小时,交了两次,没能通过这道题目。赛后领队还问我们,你们的提交是认真的么。我们回答是。而这个题其实确实可做,现场的队伍完全是被没人通过的积分榜给吓住了。赛后有人问过裁判,裁判们一度认为,这个题是全场最简单的题目,应该被首杀然后大面积通过。只能说,如此巨大的误判,也是史无前例了。而事实上,这个题对于n模4的余数,有四种情况,四种情况的最优解都是n。我队友已经成功地推演出了其中的三种情况,就差最后一种,只能算到n+1。只能说是非常可惜了,痛失总决赛首杀,甚至是唯一杀的机会。
最终我们两题结束了这次比赛。
我们能感觉到,赛后大家都很无语。总决赛题目难成这样也是史无前例的,而那个为了防止tourist退场的谣言因此很快就传开了。场外tourist队以七题、更低的罚时成绩拿到第一。当然场外队是不算的。他们其实差点就能八题甚至更多了。A题他们有个人想了一个小时,最终没想出来,可见确实不是大水题。然后J题就十分巧妙了,这题一看就大概知道方向,但是推导细节会让人想死,外加代码量超级巨大。根据Petr的博客,现场发生了“我码完了,我去…我忘了要字典序最小了…我放弃了…”的情况。
最终揭榜的时候,出现了戏剧性的惊天大逆转。封榜之前,莫斯科国立大学以6题的成绩遥遥领先,第二名只有4题。这种局面,加之这次的题目难度,怎么看他们夺冠都是板上钉钉了。结果圣彼得堡大学最后一个小时通过了三题,同样是7题,以39分钟的罚时优势完成惊天大逆转。最后一题8次错误提交,正确提交出现在比赛倒数第二分钟,也是非常极限了。
排除这些小花絮,我们全队都很沮丧,然后一致决定明年再战。
第二次参加总决赛,做完了所有简单题,略有遗憾。
鉴于去年的表现实在是太拉了,这一年我们决定好好准备。
队内三人分工已经十分明确。我是负责代码题和各种花里胡哨算法的人,于是在这一年里我学了非常多的算法,有很多是以前听都没听说过的,比如半平面交,AC自动机,看名字就觉得花里胡哨的,但是很常用。我个人的训练方式就是刷往年的地区预选赛的题,这样基本就能覆盖所有常用的算法了。
数学队友负责数学、动态规划、贪心等问题。总之但凡跟数学沾点边,就是他的问题。他的训练方式就是在Codeforces和Topcoder上打比赛。这两者上面的题目风格跟ICPC的题目风格差别还是非常大的,每道题或多或少都跟数学沾边,而且因为比赛时长的缘故,代码量还不能特别大,所以正适合用来学习这方面的算法知识。
读题队友完全不码题,负责花里胡哨。我们对他的要求是,你不用会码,但是你啥都得会,得有见识。他的训练方法就是打开一个在线评测系统,然后按顺序一道一道看题,不会就看题解,遇到了什么花里胡哨的,就记住,有必要让我们知道的,就告诉我们。
除去个人训练,我们团队训练也比去年多了不知道多少倍。为了好好准备比赛,我们最后一个学期(我和数学队友是研一,读题队友是大四)全都选了下限的课,还是水课,就是为了把更多的时间用来训练。一开始大概一周一练,后来临近学期末一周两练,等到放假之后,直接一天一练。要知道,一场比赛5个小时,加上之后把可做的题目都补上做完,这一天就过去了,而且可能还不够。
然后在训练的过程中,我们逐渐树立了爆棚的自信心。我们在Codeforces上练5个小时的模拟赛,我们发现今年参赛的不少队伍,都在跟我们练一样的比赛(可以任意时间开始虚拟比赛,所以不是同一时间)。当时的清华队,北大队,上交队,还有一些欧洲队,我们都遇到过。而打的比赛多了,自然就有失手的时候。我的意思是说,这些强队都有失手的时候,于是我们几乎把能见到的队都赢过一遍。最终得出结论:只要运气和状态足够好,还有什么队是我们完全赢不了的么。思来想去,就只有今年的tourist队了。我们今年的目标就是拿牌。
而最终的事实证明,“只要运气和状态足够好”这个前提条件还是太苛刻了。最终正赛的时候,我们也就发挥了正常偏下的水平而已。
而更严重的问题是,我们在Codeforces上练的训练赛大都是俄罗斯训练营的比赛(俄罗斯都是超强队,例如圣彼得堡大学ITMO,也就是tourist所在的学校,都已经霸占冠军好多次了),而这些训练营的题目风格跟总决赛差距很大。这里的风格更接近于Codeforces本体,就是数学比重很高,而代码量要求很小。简而言之,可能这些比赛全都练我队友了,我自己码纯代码题的能力完全没有得到锻炼。而很不幸的是,我是在这次比赛的赛后总结,才终于意识到了这个问题。
今年我们三个人,外加领队,以及去年没法去俄罗斯的副领队,全都一起赶飞机来到了摩洛哥。比赛前几天的旅游活动,我已经没什么印象了,当时大概所有的心思都用在想比赛上了。
主要就记得当时室外超级热,出门就想死,只想待在空调房里。路上遇到热情群众,看你热,就主动跟你搭话说热。然后他唔噜唔噜说了什么我也听不懂,最后指着远方来了一句:“the great Sahara”!就这句我听懂了,应该是在炫耀附近有撒哈拉沙漠。
有一件令我印象深刻的事,这位拥有俄罗斯血统的副领队,是真的很虎。我们在马拉喀什市中心的集市中,遇到了一个摆地摊的纹身师傅。别问我为什么纹身师傅可以摆地摊,反正一眼看上去就不靠谱,不像什么正经生意。然后这位副领队就突发奇想,要不我在手臂上纹个老虎吧!然后纹身师傅让他画下来,他就在手臂上画了个Q版的猫。
我们三个人当时想法极其一致。这个纹身你要是做了,你的手还要不要了…最终,不知道出于什么原因,副领队并没有纹。也许是他最后终于也发现这玩意不靠谱了吧。
集市上还有人卖鲜榨的橙汁。榨果汁的机器一看就很浪费。首先你把橙子从中间切两半,变成两个半球。然后把一个背对着放到机器里,然后手动压扁,橙汁就出来了,然后这半片橙子就报废了。肉眼可见的,浪费率极高。不过有一说一,这橙汁真好喝。可能就是因为浪费得多,导致橙子皮,包括里面的果肉皮一点都没进果汁,所以完全不苦,纯甜。
我以前没见过这种机器。不过几年之后,在我回国的时候,在机场再一次见到了这种手艺。那是一个纯自动的机器,跟自动贩卖机一模一样。你交钱,它就用同上的方法,自动现场切三个橙子,压扁榨出果汁。结果那个机器显然精度不行,中途卡住了,偷了我一个橙子,导致我那杯只有三分之二,不过我显然是没处说理了。而再过几年我再回国的时候,就再也没见过这种机器了。大概是成本太高,机器质量太差,而投诉又多,直接倒闭了吧。
言归正传。我们三人讨论了一下,要不要在现场来个模拟赛。最终放弃了,觉得太蛋疼了。这么临阵磨枪也不知道意义是啥。
正式比赛日。我们来到现场发现,有13个颜色的气球。也就是说,这次有13道题。这也是史无前例了。按道理来说,应该会有一道超级大水题,白送分。而结果确实如此。
开场5分钟,有人过了A。一看果然送分题,跟上11分钟通过。
然后就是找下一题。我们发现B是个几何题,一看就不可做,直接撕了。然后F和M是两个代码题,应该没什么难度,但是需要时间。D一眼看上去像是个需要微积分的数学题。然后读题队友发现,C是个简单网络流。我看了一遍发现没问题,直接开码。
然后在28,29,30分钟,连续有人通过了F,C和D。我们更加确定C就是简单网络流。在35分钟码完了,提交,错了。尴尬了。我看了两遍代码,没发现错误,于是卡题了。
这个时候,我们决定让读题队友debug,我开始码F,数学队友开始推导D题的公式。然后在一个小时左右的时候,读题队友发现C题漏情况了。于是把这个情况加上,修改代码,63分钟提交通过。
然后F我可能码了半个多小时,然后照着样例调代码又调了二十分钟,只能说代码能力还是太差了。最终在93分钟提交,错误。然后打印代码,离线debug。
数学队友开始写D。因为他之前基本没写过几何题,我跟他说圆周率常数一定要写得足够长(我被这个坑过),然后没有时间复杂度要求的全用long double,不要用double。这期间,我发现了F的问题,占用了一点时间修改,然后102分钟的时候通过了F。
在112分钟的时候,D一遍通过。
而这个时候,我们4题,抬头一看榜,已经天翻地覆了。39,47,53分钟,有人通过了L,J,I。115和118分钟,有人通过了E和H。这个时候,全场有9题有人通过,而榜一大哥,我记得是东京大学,已经7题了。两个小时7题也是史无前例。按照之前CMU教练的分析,2个小时有9题有人通过,这种情况想要拿牌得10题,金牌要12题。
这个时候,数学队友开始看L,我开始码I。I就是个很简单的线段合并。有很多组线段,你要计算出被所有组线段都覆盖的区间总长度。我们当时第一想法就是用线段树,还得是离散的线段树,因为端点都是实数。但是这怎么想都不合理,因为现场已经很多人通过这道题了,难道大家都用的离散化线段树?我们转念一想,是总决赛,还是有可能的。不过最终证明是我们想多了。这题直接把所有空白部分变成线段,就变成了求至少被一个线段覆盖的区间,然后你用总区间减掉这个就行了,一个排序搞定。
然后我们就在现场开始纠结这个离散化线段树,说实话真的不是特别复杂。我们在126分钟就完成了第一次错误提交。因为我们从来也没写过,想想也知道,各种边界条件,实数相等的判定,很容易出问题,于是就开始了漫长的debug。这个题是卡了我们最久,浪费时间最长的题目。我们大概每半个小时交一次,最终错了四次,在第269分钟终于艰难地通过了这道题目。这题从开始做到最终通过,用时怕是超过3个小时。
在离线调I的过程中,数学队友开始写L。不是特别复杂的题目,173分钟一次通过。
然后就是这次比赛最神奇的题目J。看着像数学题。数学队友看完之后问我们,你们知道有什么能快速计算两个大整数相乘的算法么。我们都说不知道。其实就是快速傅立叶变换(FFT)。我们训练的时候完全没遇到过FFT的题目,所以没人会。而数学队友准确地找到了算法,就差一个FFT。那怎么办呢?交表吧。
我们看了一下,这个题输入就一个整数,正适合交表,询问部分可以看表回答,不用管。然后我们掐指一算,这个表简直能写下。不同的精度下,需要的文件大小不一样。比如如果我们每100个数存一个,那我们需要上交一个100kb大小的程序,代价是如果询问问到中间的数,你需要把这100个全都算出来。如果每50个数存一个,就要上交200kb,但是程序运行时就只需要算50个数的时间了。我们也不知道比赛允许上传的文件最大是多少,所以决定不管了,先试试看。
然后我们就开始了漫长的跟表的战斗。本来不用这么麻烦的,但是怎奈比赛用的笔记本性能实在是太差了。一个100kb的文件,我队友按了一下保存,直接就卡住了,差点死机。这光标转圈转了整整30秒,终于保存完毕了。每次保存都能吓死个人,生怕它死机。而我们必须要小心翼翼地操作,一旦复制粘贴的数据太大了,怕是又要死机。而本来写程序写一点保存一点是好习惯,现在完全变成了负担。每次没改完的时候,我队友顺手一个快捷键保存,然后就会紧跟着一句国骂,为啥又手贱了。
接下来比赛的两个小时,基本上都是,我调一会离散化线段树,队友调一会这个巨大的表,我们轮流操作,轮流提交,轮流错。
在封榜之前,奖牌区要求的最少题数已经来到了8题。而那时我们连卡2题,还不知道咋办呢。因为我们的目标是拿牌,所以一定要开新题。所以在我和数学队友忙活的时候,读题队友就去开新题了。他觉得E可做,就是个简单贪心。然后我就迅速写了个简单贪心,然后就错了,连错两次。然后他也不知道怎么办了,不知道是算法问题还是程序问题。这下连卡三题了。然后数学队友来看了一眼,说这贪心肯定不对啊,然后30秒给了个反例。然后这题彻底不会了,我们又回到了卡两题的阶段。
这个交表的J题,在比赛结束前的四分钟最后一次提交,艰难通过。至此,我们的比赛结束了。
唯一值得一提的是,我们J题是交表,而我们是全场唯一一个交表队。在官方提供的赛后总结里,专门提到了,这个题可以交表,而裁判们发现,现场真的有一个队交表,那个队就是我们。
我当时觉得,是不是命题人压根也没想到这题还能交表,是因为我们交表了,他们才意识到可以,然后把那段话加到了总结里。直到十年之后,我自己成为了裁判,凭我跟他们的接触,以及我们对题目准备的要求来看,极大概率当时裁判早就知道这题可以交表,但是还是允许了这个操作。
我们最终的成绩是7题,去掉罚时并列28名。算罚时50名整,所有七题队倒数第一。
赛后我们跟领队说的就是,我们做完了所有简单题,算是完成任务了。而因为I和J实在是卡了我们太长时间,我们完全没有时间做别的题了。如果I脑子不抽,J我们会FFT,每个题都能省下至少一个小时的时间。那样的话,M这种纯代码题,还是有可能出的。H这种纯数学题,数学队友能做出来的概率还是很大的。
但是现实没有如果,只能说,略有遗憾吧。恭喜ITMO的tourist队完成退场成就,以满分的成绩拿到冠军,成为有史以来第一个也是唯一一个在总决赛退场的队伍。揭榜的时候全场沸腾,看来大家也都想目睹传奇的诞生。
每个人被允许参加ICPC世界总决赛的次数,上限就是两次。至此,我的ICPC选手生涯正式结束。
第一次以教练身份参加总决赛。
今年总决赛这个选址,我很失望。我已经不是选手了,来总决赛基本就是个玩。所以我当然希望总决赛可以选在风水宝地来举办,比如去年泰国的普吉岛就不错。今年这个地方就…在座的各位,有一个算一个,谁听说过这里的,举手来看看。如果不是亲身去过总统山,谁会知道总统山在这里?
这次旅程是学校报销,令人心情舒畅。唯一有一点遗憾的就是,我暑期在学校做科研,本来可以当一个大课的助教,能挣一波大钱(以当时的眼光来看肯定是大钱了)。结果我跟那个老师聊过了之后,他说那个课就一个助教,所以不能接受我直接请假一个星期这种事情,然后给我拒了。没办法,我只能去当另一门小课的助教,只能拿到一半的钱。不过没什么好犹豫的,肯定是去总决赛更重要啊!
我们学校今年队里三个人是:美国两兄弟和香港记者。关于他们的晋级之路,以及我对他们的称谓来源,请参考预选赛总集篇。
这次总算是可以心情平静地参加一日游了。主办方带我们去了总统山——这附近最著名的景点。在这里,我跟香港记者一起同游。然后不愧是香港记者,眼神真好,一眼就发现了tourist,一个人!然后,犹豫了片刻之后,果断冲上去要合照,然后照到了。香港记者一直是超级崇拜tourist的,这波血赚!然后拍完照,tourist一个闪现加疾跑就消失了,显然是不想再被人抓住拍照了。结果我没照到,亏麻了!
这里就只能放上光秃秃的总统山,聊表心意了。看着当年的我的照片,想不到我当时年纪轻轻,就已经这么年轻了。
再之后就是参观了疯马纪念雕像。这东西,怎么说呢,确实是雕像就是了。疯马雕像的由来与总统山有关。据说是因为,四位总统的雕像雕成后,印第安酋长不干了,他说“我们也有自己的伟大的英雄。我们要雕刻比你们总统山更大的雕像”。雕像高172米、宽195米,比乐山大佛大两倍,单是马头部位就超过了四位总统头部5米有余,建成后将是世界上最大的人工雕像。从1948年起至今60多年的时间过去了,酋长和他的七个儿子们一起“愚公移山”,但只完成了疯马脸部的雕刻,据说是因为印第安人不想要美国政府的钱,而想自己独立完成对自己民族英雄雕像的建造工程,全部用自愿捐助者的民间资金,因此经费不足。
现在这个雕像的完成度么…如图所示。近处是商店门口的完成效果雕像,远处是山体的实际完成状况。这完成度能有10%?
到了比赛日,我反正是完全没压力,而我的队员们感觉也没有任何压力。他们啥水平自己心里是有数的,能在总决赛有名次,别是个无名次的荣誉奖就可以了。
然而最终还是拿了个荣誉奖。这仨人在63分钟通过三题之后,就再也没过其他的题了,打了4个小时的酱油。而ITMO再一次毫无意外地拿到了冠军。
我在现场啥事没有,也没有认识的人,只能闲逛。我在现场找到了上海交通大学的观战小团体,很长一段时间就坐在他们后面听他们讨论题目。说实话,本来以为5个小时挺长的,结果时间过得很快。我有的时候盯着那个榜看,明明毫无变化,也不知道我在看啥。看着看着俩小时就过去了。
比赛结束,晚上主办方带大家看了以山体为背景的“灯光秀”。之所以加引号,是因为我想说,你管这玩意叫灯光秀?我在山里随便找一百个人用激光手电就能做出这种效果吧。这也太寒碜了。不只是我作为中国人觉得这秀太破了,同队的美国领队都看不下去了,一副一言难尽的表情,提前离开了现场,感觉这破玩意很给美国丢人。
第二次以教练身份参加总决赛。
今年总决赛这个选址,我更失望了。为啥我当两年教练,你给我的地方一次中国一次美国?虽然说,作为旅游目的地,北京肯定比拉皮德城好到不知道哪里去了,但是北京我去过无数次了啊!我都没在北京上过学,但那地铁二号线,我感觉我都已经坐过至少十圈了。
我想去世界上其他地方啊!
算了,就当学校请客,免费回国了。
今年队里的三个成员,一个美国大哥,一个美国二哥,一个美国小弟。这次的晋级之路倒是颇为顺利,美国大哥一人掀翻全场。详情请参考预选赛总集篇。
美国二哥是从去年开始一直来跟我算法课的人,可谓是非常刻苦了。我已经把我会的都教给他了。虽然我会的不多,但是只看算法知识面的覆盖范围,应付到银牌区肯定是没问题的。至于他学会了多少,就看他的造化了。
美国小弟就,嗯,在这个队里作用很小。他的手速被美国大哥完爆,码题肯定是轮不到他的。他的知识面又被美国二哥完爆,这就导致,他在这个队伍里,确实作用不大。
主办方提供的宾馆非常豪华,我们的房间在35楼,我没记错的话,是客人能到达的顶楼。风景也是相当的好了。
主办方组织了去长城的参观活动,我直接没去。你猜为什么。
然后我们学校这几个人自己组织了个小团,去参观故宫,我也没跟着去。
说实话,这次我应该跟着去的,但是那天我有约了。所以就放任他们自己去了。我决定相信北京人自“北京欢迎你”时代积累下来的英语实力。走之前,我问副领队,你们有钱么?他说没有。我说你有微信么?他说有,但是还没整明白这支付能不能用。我说这你就敢出门?
然后我就把我身上所有的现金,大概五百多,全给他们了。感觉上应该够他们这一天造的了吧。最起码,门票钱够了吧。别的你们爱咋咋地吧。
除去这种远程的大型活动,我还带他们游览了北大周边的小吃街。这时候,就体现出我这个非母语者的英语水平实在是很不行了。副领队要喝奶茶,我看着这全中文的店面,还有那茫茫多的可选添加成分……完全不知道怎么翻译啊!我只能说,甜的,你看着喝吧。
到了比赛日,我依旧非常悠闲。
不过说实话,跟去年相比,还是稍微紧张一点。毕竟去年是纯玩,今年我对这支队伍的成绩还是有点小期待的,尤其是在这美国大哥手速如此惊人、美国二哥算法实力也很过关的情况下。
结果确实也是如此。他们最终四题,并列56名。你别看有40多个队伍并列4题,他们的排名极其靠前。如果把这些四题队伍再按罚时排开,他们应该是60名。这比我自己参赛的第一年成绩都好。
而很遗憾,北京大学最终没能拿到冠军。能看得出来,作为东道主,这个队伍非常强,也是尽力了。
最终,在我要离开北京的时候,还发生了一件趣事。我在地铁站,拖着行李箱等人。然后就有教培机构的人走上来问我,说你要学英语么。当时的我那是相当的年轻啊,看着就是个学生。事实上确实也还是学生。
我说,我不学英语。不过,你们招老师么?他说,我们招老师那是相当严格的,然后说了一堆,我也没怎么听。
最后,不知道出于什么原因,可能是礼貌,也可能是作为销售想最后挣扎一把,他问我,你家住哪里?我说旧金山。
然后他就无语了。憋了大概有三秒钟,然后说,你玩我呢是么……然后就走开了。
一开始是你自己非要上来搭讪的啊!
参加第一届北美总决赛。
没想到吧,今年我还在。说实话,我自己都没想到。
我去年就已经能毕业了,今年人都不在学校了。但是还是跟2016年一样的问题,我走了之后,学生教练直接断档。红名大神补上了,但是还是有一些关于系统方面的问题,又把我拉回来了。我们学校有自己的评测系统。那个系统是我的学生教练当年自己搭建的,属实是强无敌了。然后我们一直在用,用了很多年了,虽然简陋,但是很完善。
然后今年我没出什么大力,也压根不知道选手都有谁,也没去现场。但是今年有个不同,就是北美总决赛(NAC)出现了。往年是区域预选赛直接选出晋级队伍,从今年开始,中间多了一步,就是这个北美总决赛。各个区域预选赛会有若干支排名靠前的队伍晋级北美总决赛,我们赛区大概是前五。
今年是北美总决赛第一年,我记得区域预选赛当时还是保留了自己的晋级名额:冠军可以直接晋级,剩下的名额再通过北美总决赛选拔。而几年之后,区域预选赛就完全没有晋级名额了,全部的队伍都要在北美总决赛选拔。后来甚至出现过这种情况:以往能晋级四个队伍的中部赛区(当时各赛区的晋级名额跟参赛规模等因素有关),到了北美总决赛,这个赛区的队伍全部淘汰,没有任何队伍能晋级总决赛。而 NAC 制度实行后的那些年里,我们赛区基本都能稳定进三个,甚至更多。此时,到底哪些赛区都是菜鸡一目了然。
我们赛区预选赛前五能进北美总决赛……这也太好进了吧!根本就毫无压力。
结果果然就是毫无压力地晋级了。然后我就跟着我们学校,去了第一届北美总决赛。我是跟一个选手住在同一个房间,所以房间免费。报名方面的费用,我也不知道有没有,反正都是学校交的。不过这个来回的机票就是我自费的了。毕竟,名义上我已经不在学校了。
整个活动的行程安排跟世界总决赛很像,前前后后差不多要一个星期。但是我这刚上班,也没那么多假,然后这比赛跟我也没啥关系。于是我是在中间的某一天去的。
正常情况下,在官方安排的抵达时间内,机场都会有人迎接。但是显然我到得似乎太晚了,机场一个人也没有。地铁站也一个人没有。我是自己一个人坐地铁到的比赛现场。
比赛提供的宾馆长这样。
还挺炫酷的。
转眼来到比赛当天。比赛场馆十分空旷。
感觉上,来参加北美总决赛的队伍并不多,大概也就50多个,所以其实用不着这么大的场地。于是主办方大概是进行了一些操作,使得看上去场地都被占满了。
比赛的时候,我大部分时间都在跟我校的学生教练,也就是红名大神,讨论题目。然后还是跟以往一样的感觉。5个小时看上去很长,但是现场真是时光飞逝。
比赛结果么……随便吧,反正队里有什么人我都不是很清楚。唯一跟我有点关系的,大概就是美国小弟还在队里。
最终我们未能晋级,也算是意料之中吧。要是这么容易就能晋级的话,我前些年当教练的时候,都在折腾些啥啊。
不过,很久之后再回过头来看,今年倒是没什么遗憾。这一届对应的世界总决赛后来因为疫情大幅延期。而就算我校晋级了,到时候我应该也是去不了总决赛现场的,原因是美国签证。具体情况跟孟加拉国那一年非常接近,详情请参考埃及总决赛那一篇。
第一次在现场以裁判身份参加总决赛。
时隔多年,我再一次踏足总决赛的赛场,心情十分激动的同时,也十分感慨。真可谓是,激动的心,颤抖的手。果然是岁月不饶人,距离我第一次参加比赛,已经过去了12年。而距离我第一次接触编程,已经过去了17年。
首先,这并不是我第一次以裁判的身份参加总决赛的工作。去年在孟加拉国比赛(时间上来讲是前年),我就是裁判,但是我没有去现场。作为拥有着“激动的心,颤抖的手”的人,能去的话我是肯定要去的,但是去不了。众所周知,如我一样用签证进入美国的人,如果要出国旅游,很多时候,最难搞的不是目标国的签证,而是美国签证。这点对中国公民尤其成立。这次我就遇到了跟2018年我去伦敦的时候,我同期实习的组员一样的问题。如果我离开美国,我就没有签证回来了。
而这次更难绷的是,因为疫情原因,中国特别难回。那段时间,中国还没全面解封,回国先要给你隔离个不知道多少天。然后美国的工作签证当时触发行政检查的概率也相当地高,回国就算一切顺利,保底也要一个月才能出来。算上我去比赛的时间,这就是一个半月了。对于正在工作的我来说,这么长时间的请假大概是无法接受的。
而我还有个选项就是去附近国家办理美国签证,比如我可以去加拿大或者墨西哥。然后我一查,网上说,可能是因为大家都这么搞,去加拿大办理美国签证能预约到的面试日期,已经是一年之后。然后我就无语了。再查墨西哥,据说是半年之后,但是有可能刷出三个月之内甚至更近的,要看运气,但是约的时候才知道。
于是我决定碰碰运气。而这个运气不是随便谁想碰就能碰的。你首先得填完所有的表,更重要的是,你得先交钱,然后才能进到选时间的页面。然后交钱这一步相当地麻烦,只能找当地人代交,一看就很容易被骗钱。我在网上找了个人,据说是专业代缴,让他帮忙缴费。很快就成功了,好歹没被骗。
然而这个预约面试时间也是没救了。我查看了墨西哥所有能办签证的大使馆。首先就不是哪个都能办理我这种情况的,有些大使馆只给墨西哥人办理,外国人面谈。然后能用的大使馆,那个档期也都是半年开外了,完全赶不上。
我默默地刷新了两个星期,没有任何进展。想来只能找网上专业的代刷,用工具每天24小时不停地刷新,才有可能抢到。至此,我放弃了。这个签证费,我就当捐给美国大使馆了。
除了签证,还有个其他的跟身份相关的问题。当时我的美国绿卡排期,表B快到了,表A还差一年。这里给不了解的朋友们科普一下。申请绿卡首先你会有一个PD,也就是你的“优先日期”。简单来说,表A决定什么时候你的绿卡有名额可以最终获批;表B则决定什么时候可以提前提交绿卡申请。当然,实际能不能按照表B提交,还要看USCIS当月允许使用表A还是表B。一般来说,表B会走在表A前面,有的时候会快很多。而因为表B只影响什么时候可以提交申请,所以它并不代表什么时候能够拿到绿卡,而且排期本身也可能发生倒退。经常某个月突然前进一大截,一大堆申请涌入,然后之后又停滞甚至倒退。
而这里最经常被问到的就是,表A没到,表B到了有啥用啊,反正不会被批卡。理论上是这样的,但是现实是,绿卡审批旷日持久。现在听说快很多了,在我们那个时候,从提交申请开始,一直到拿到卡,等上一年甚至更久都不是什么稀奇事。之前还有更慢的时候。而如果你的申请不幸进入了处理特别慢的流程,那等上两年也不是没有可能。
表A没到,确实意味着因为没有可用的移民签证名额而不能最终批卡,但这并不意味着前面的审批工作都不能进行。也就是说,如果当月允许使用表B,而你的表B又已经排到了,你就可以先把申请交上去,让USCIS开始处理。等前面的流程基本走完以后,即使暂时因为表A没到而不能最终批卡,也可以先在那里等着。一旦之后表A排到你的优先日期,而且其他审批条件也都已经满足,就有可能很快拿到卡。这比等到表A排到以后才开始提交申请,可是快了不知道多少。正可谓是,晚交两天,多等两年。
回归到我自己的情况,当时眼看着表B就要排到我的优先日期了。如果那个月USCIS允许使用表B,而我又符合提交条件,我本来就可以把绿卡申请交上去。但如果我在这期间离开美国,就可能影响我当时提交申请,只能等到回来以后再处理(这里解释起来就更复杂了,略过)。而等我回来,一旦表B又倒退了,我怕是悔得肠子都要青了。
综上所述,在考虑到了诸多因素之后,我决定2022年(也就是2021年总决赛)就不去现场了。这年是我第一次给总决赛出题改题,体验十分惊悚。你提交题目需要提交解法,但是题目发给我的时候,不告诉我怎么做,要全部写好了之后跟原作者盲对答案。如果题目指定是随机的,这岂不是要求每个人都要会做每一道题,这要求还是非常高的。只能说还好我前两年努力提升了实力,达到了Codeforces红名,不然怕是肯定不会做。整个准备过程,保密工作极其严苛,所有邮件文件都要加密,随时做好被人拦截攻击的准备。发个邮件就跟谍战一样。
我给我准备的题目随后画了一张图,丑的一批,但是后来大家好像没有想要改的意思,只要清晰度够了就行。我还试图给一道题目加入彩蛋数据,在隐藏数据里画出了原神的七种元素图标。而最后这数据让人删了,理由是数据没用,然后这个还被认成了宝可梦的元素。
时间来到2023年。这比赛本来要在11月份在沙姆沙伊赫(对,你没有看错,本来压根就不在卢克索)。但是后来发生了什么大家也知道了。2023年10月7日以色列—哈马斯战争爆发后,中东安全局势迅速恶化。虽然沙姆沙伊赫离加沙并不近,但大量参赛者的旅行、安全和航班安排受到影响,因此最终取消了11月的计划。日期也变成了待定。
后来直到2024年1月19日,ICPC才给参赛者发新邮件,确定新日期为2024年4月14–19日,同时透露比赛地点会改到“尼罗河畔的一座著名城市”,之后才正式确认是卢克索。
这个主办方也是没谁了,每次来埃及都要出事。想当年,2011年总决赛原定在埃及沙姆沙伊赫举行,整个活动原定2011年2月28日–3月4日。问题出在比赛前大约一个月。2011年1月25日,埃及爆发大规模反政府示威,也就是后来所谓“埃及革命/阿拉伯之春”的一部分。开罗等城市迅速出现严重动荡。到2月1日左右,主办方已经决定:埃及不能办了,总决赛延期并迁往其他国家,具体地点和时间以后再公布。最终,比赛地点转移到了美国。
而这次,类似的剧情再次上演。虽然这个事情不是主办方能控制的,但是主办方“很会选地方”的形象已经在论坛里深入人心了。论坛里很多人在骂。主要是,这是个比赛,又不是个普通活动。延期的话对选手的状态,尤其是有能力夺冠的队伍,影响很大。
而且,因为疫情的原因,总决赛本来就已经推迟了一年多。今年为了追上进度,是2022年和2023年的总决赛一起举办。然后现在一起延期。那可是2022年的总决赛,现在要2024年举办。所谓的国际大学生程序设计竞赛,比赛选手里有些人都已经毕业工作两年了,距离他们晋级已经过了不知道多久了,你把他们拉回来比赛,这还能比么?
选手们需要地方发泄,于是主办方被骂惨了。
最终,排除掉千难万难,总决赛在2024年在卢克索举行。
埃及支持落地签证,所以签证不是问题。而此时的我已经顺利拿到美国绿卡,回美国也不再是问题。不过说实话,这地方还挺难去的。坐飞机一顿操作,时间实在是有点长,我这老命实在是有点不经折腾。
入境埃及之后,要在开罗转机,然后去卢克索。我是万万没想到,这埃及之旅在开罗就先给我来了两个下马威。我这次在开罗机场转机,前前后后过了三层安检。别问我为啥出了机场。本来可以在机场内转机,但是路牌给我绕晕了,走着走着我直接出机场了。
三层安检分别为:进入机场一次简单的,然后用登机牌到进入候机区一次带强度的,然后每个登机口还有自己单独的带强度的安检。
那么问题出现了。我这个登机口的安检员就一个人,他的权限很大。正所谓,绝对的权力导致绝对的腐败,没想到这个事情就让我遇到了。
当我通过安检的时候,安检员让我把箱子打开。然后他指着我的蒸汽眼罩说,这是啥。我说蒸汽眼罩,缓解眼部疲劳的。他说不让带。这个时候我还没意识到问题的严重性。我还只是简单地以为,这东西不常见,他可能没见过,所以保险起见不让带。
他把我的蒸汽眼罩拿出来放在一旁,然后他又指着我的电动牙刷盒子说,这是啥。我说电动牙刷。他说不让带。这个时候我已经满脸问号了。于是他又把我的电动牙刷拿走了。
最后,他指着我的苹果耳机说,这是啥。我说这显然是耳机啊。他说不让带。然后就把耳机拿出来放到了一旁。我已经彻底无语了,这是啥意思?
然后这个时候,他显然也意识到了,我好像还没懂他的意思。于是,他跟我说了一句话。他这句话说完,我一下子就全懂了。
他说,你有钱么?
然后我一下就懂了。这不就是明抢么。然而我能怎么办呢。我只能一脸了然的表情,从兜里掏出了钱。然后他一把就按住了我的手,说你干啥呢,然后把我的手,连带着钱一起按进了桌子上放着的我的书包里。我心里又一个大无语。你还知道索贿是不对的啊,你这是怕监控录像么。
然后我就在书包里翻钱,从中抽出一张10块(埃及镑)。他看着很不满意,说nonono然后示意要那张一百的。然而我能怎么办呢。我只能把100的给他。然后他很满意,笑着说,好朋友,现在都没关系了。然后拿起我的耳机,说这个没问题了,然后放进了我书包里。同理,把牙刷和眼罩都放进了我书包里。然后就放我过去了。
我当时心里十分慌张,生怕再出什么幺蛾子,只想快点逃离现场。我心说,还好之前入境的时候,我用美元换了一些埃及镑。不然现在咋办,我又没有现金。你直接指着我的美元说,这个不让带,然后明抢,我能怎么办?
坐在登机口边,我上网查了一下,发现网上有不少人表示在埃及机场遇到过类似情况。很多人都表示被安检人员讹过。网上还有人说,他们专挑那种一个人的,看上去就没有帮手,很好欺负的人下手。在这里你人生地不熟,总不至于让他把他领班叫过来一起理论吧。到时候领班帮谁还不一定呢,直接给你遣返了,你意下如何?
就今天而言,我也不是唯一一个被讹的人。好多人被讹了。我坐着的时候,就听到不远处两个中国女生在讨论自己刚刚被明抢了。
这事还没完。在机场去上厕所的时候,又遇到了坑爹事。我洗手的时候,旁边就有洗手液和擦手纸。然后有个好像是清洁工一样的人,直接就用手拿着洗手液,递到了我面前,我没用。然后在我要擦干的时候,他又把一包纸巾递到了我面前,我手贱抽了两张。然后在我要走的时候,他直接堵在了厕所门口,伸手要小费。当时他就只说了一句tip,就再也不说话了。我有理由怀疑,这是他会的唯一一个英语单词,就用来讹人了。
又是明抢,我能怎么办呢?难道还能在厕所里跟他打一架么……
事已至此,我对埃及的印象已经落到了极差这一档。网上说的,不去后悔一辈子,去了一辈子后悔,看来是一点都不夸张。
我上网查了一下,当时网上能查到的一些数据里,有埃及大学正教授的月收入只有两万埃及镑左右,折算成美元就四百,赶上美国普通博士生的六分之一。而如果这个安检工作人员,每个月工作20天,每天但凡能讹到10个人,那他的额外收入就超过大学正教授了。这合理么?这不应该大力整治么?
坐飞机顺利到达卢克索,好在中间没有再出什么幺蛾子。主办方提供的宾馆是在尼罗河边的一家“豪华度假中心”。加引号是因为,它跟真正的豪华度假中心比起来,差距不小,但是看得出来,埃及尽力了。
酒店就在河边。在酒店里就能看到尼罗河的夜景。
而作为一家度假中心,它居然有自己的动物园。而今年比赛的题目中,就有一道题以动物园为背景。所以我们就去动物园里,现场拍摄了一张图,作为那道题的配图(不是下面这张)。
主办方提供的休息一日游里,以在尼罗河坐船开场。说实话,体验非常不错。在河上坐小船吹小风,听起来算不上什么。但是一想到脚下的是传统意义上的世界第一长河尼罗河,顿时就觉得好像确实挺带劲的。
然后我们就去参观了卡尔纳克神庙。感觉电影中神秘的画面走入了现实,仿佛随时会有木乃伊冲出来一样。
除去主办方提供的行程,我们裁判团忙里偷闲,组了私团,去了国王谷和王后谷,以及附近一些其他的地方。
埃及的古文明遗址还真的是多得数不胜数。
转眼来到比赛当天。现场的直播厅在野外,很有氛围,但是一看就觉得蚊子会很多。
比赛场地是临时搭建的大棚。可能放眼整个埃及,你都找不到一个能同时容纳两届总决赛,总计260多支队伍的大场馆。于是只能临时搭建。你可以认为那是一个双层塑料大棚,只不过是不透明的。外层到中层是工作人员的场地,选手无法到达,然后最内层是个超大的比赛场馆。
别的不说,空调是真的到位了。比赛场馆相当凉快。不然以室外那么高的温度,怕是比赛的时候会很难受。
裁判跟系统工作人员共享一个办公室。说是办公室,其实它的大小堪比一个大学机房。这两伙人共享一个房间应该是传统了,因为两者将会共同决定比赛的运行以及题目的测评,万一出了幺蛾子,也好找人讨论。
比赛题目采用的是独立题目制度。两场总决赛题目完全独立。虽然会有一样的题目,但是采用的是独立的不同编号。两边互相看对方的积分榜是没有办法准确判断出哪道题对应的是哪道题的。而在选题方面,我们也是下了一些心思的。我们希望两边不同的题目可以足够地不同,这样至少使得两边的冠军没有可比性。否则如果两边的题目和比赛走势都过于地相似,而最终一边的冠军比另一边的冠军多一题,那明显就可以得出结论,弱的一边的冠军纯粹运气好,强队都在对面。这样即使拿了冠军也会被嘲讽,体验会非常地不好。
跟之前以教练的身份来总决赛的时候类似,乍一听五个小时的比赛好像挺长的,但是那个积分榜,看着看着俩小时就过去了,时间过得还是相当地快的。
而在比赛过程中,我被邀请去录制了一道题目的题解。这个视频现在还在总决赛官方油管账户里。
这五个小时的裁判生涯可谓是非常无聊了,毕竟裁判(命题人)绝大部分工作在比赛之前就做完了。如果比赛的时候真的出了很多工作,那说明出事了。比赛的时候,我们干得最多的,就是接收参赛队伍关于题目的提问,然后讨论英语语法,最后回复无可奉告。这期间收到的最有趣的问题就是:我的键盘一按0就关机,还有救么?
还好这个问题是昨天彩排时遇到的,已经修好了,不然这个队肯定是要报警了。
最后,恭喜北京大学完成惊天大逆转,拿到冠军。在276分钟首杀S题引得裁判房间集体欢呼。之后292分钟通过X题更是引爆全场。当然,被引爆的就只有我们裁判房间了。现场封榜了,不到揭榜的时候是看不到的。
相比之下,另一边的总决赛的冠军就显得平平无奇了。题目难度差不多的情况下,直接少一题,感觉完全被比下去了。这个事情最终还是发生了。
比赛闭幕式和揭榜仪式在一座3500多年历史的神庙前面的露天广场举行。就是卢克索西岸那个非常著名的哈特谢普苏特神庙,建在悬崖下面。仪式的舞台搭在神庙正前方,所以整个古埃及神庙和后面的悬崖直接成为舞台背景,非常带感。这地方白天我们还去过,只是到了晚上,灯光太亮,背景肉眼勉强能看到,但是拍照已经很难拍出来了。闭幕式当场吃饭,当晚伙食如下。感觉是个超级大锅炖。
只可惜我们提前知道了比赛结果,提前欢呼过了,于是揭榜过程就特别无聊。还有,现场让选手猜排名也太尬了,选手表情表示他们已经被尬出直播屏幕了。而北大罚时太高了,他们上演的逆转的戏剧性在银牌区就结束了。他们这一下子10题冲到第一,就再也没下来过了。
比赛结束后的次日,就是各回各家。我直接就坐飞机回到了美国,完全没想着能在开罗玩一天。这一趟来埃及,没有看到金字塔,也是非常地遗憾了。
后来我听说,我们裁判团中的一个美国人,比赛第二天坐的是凌晨三点的飞机,飞到开罗,然后报了个一日游,然后晚上8点的飞机飞回美国。关键是,这位大佬已经60了,这是真能造啊!我咋就没想到还能这么搞。
这次之后,我的思路就打开了。以后但凡去到什么地方,先考虑能不能用“来都来了”的思路玩上一番再说。旅游么,不就是折腾么。什么定死的行程,按照心情,瞎搞就完事了。
参加一年一度,今年三度的总决赛。
今年九月份继续参加这个一年一度,今年三度的总决赛。本来今年就一度,去年两度的,谁让埃及的那场也移到今年了。
这已经是第三次以裁判的身份参与总决赛了,心情比以往平静了很多,仿佛已经成了日常。
当时,哈萨克斯坦对中国公民是免签。本来以为这次会是最顺利的一次,然而,这个国际航班果断又给我上了一课。
我本来买的是汉莎航空的往返航班,从旧金山飞到法兰克福转机,然后直接到阿斯塔纳的航班。这个航班有一个问题是,它在法兰克福转机要坐小火车换航站楼,然后我就不知道到底需不需要入境。按理来说,法兰克福这么大的国际中转站,国际转机区肯定是全封闭的,小火车自由通行没问题。但是我翻遍了该航司的官网、该机场的官网,也没找到实锤说肯定没问题。只是读下来,话里话外的意思都是,有个独立的“国际转机区”,你只要待在里面就不需要入境。最终我还是无法确定,但是选择相信它。
然而更大的幺蛾子还在后头。结果临到出发前三个星期,返程从阿斯塔纳到法兰克福的航班取消了。这直接导致整个行程要作废。本来一个航班取消的话,你直接改签到一个其他时间的就好了。但是当天就那一个航班啊,这要怎么改签。如果换第二天的航班,那之后法兰克福和美国之间的航班也是隔天的,这一下要在法兰克福机场待超过24个小时。这下要了亲命了。
于是,这航线直接没法坐了,只能全部重订。钱倒是退了全款,但是麻烦。而且临近日期,机票价格一般会上涨。然后我查了一下,从欧洲转机的,对我来说就没有能坐的了。比如有从英国转机的,但是要换机场,然而显然我没有英国签证。再比如在波兰转机,在华沙机场待20个小时,然后前后不是一个航司运营,是否需要入境未知,然而显然我没有申根签证。这些机票给我看抑郁了。有些时间非常好的航班,比如在伊斯坦布尔转机的,因为时间过于临近,已经没了。
这下怎么办,直接去不了了?
然后我冷静下来一想,阿斯塔纳跟旧金山时差刚好12个小时,那岂不是另一个方向也可以考虑?然后我就看了从另一个方向环球的航班。果然有啊,最佳地点就是在中国“转机”。谷歌上的搜索结果完全不包含这种,因为这已经算不上“转机”了。不是联程票,你大概率需要入境。我搜索的时候,是中国往返美国加中国往返哈萨克斯坦两张票分别搜的,然后时间果然很合适。而入境中国对我来说完全不是问题。所以当即决定,就这么走,马上订票。
只能说北京机场救我一命。不然这场总决赛我怕是去不了了。
最终,我艰难地来到了阿斯塔纳。跟其他人聊过才知道,很多人都在那个被取消的航班上,然后都重订了。不过美国护照的话,在欧洲转机方便得多,也没有我后面那么多事了。
今年要说有什么新的变化,那大概是 Codeforces 世界排名第一的选手 Gennady Korotkevich,也就是 tourist,加入了裁判组。因为当裁判只需要解题能力强,不需要“快速”解题能力强,于是很多裁判要么不参加网上的比赛,要么评分都不是很高。这直接导致了有时候,当有裁判在论坛里给人解释当时比赛的情况时,会被人质疑“你谁啊”。从今往后就再也没有这个烦恼了。
还有就是,今年我们第一次用 AI 生成题目的配图。效果相当好。
比赛前几天,我们忙里偷闲,又用了一天时间,在阿斯塔纳做了城市观光。其实主要就是步行去参观了阿斯塔纳大清真寺。
只能说跟网上的照片是一模一样了。大清真寺内部建造十分精致。以及能拍到一张完全没有人的照片也是很不容易的。
然后步行回来的途中,在大街上,我们还看到了很多这种宣传画。文字看不懂,但是看图像是哈萨克斯坦特色的民族运动会。不懂就问:这个训鹰也是运动项目么?
本次总决赛,开幕式地点位于总统中心主大厅。这里安检相当严格,堪比机场。而因为每个包几乎都要翻开来看,官方给的建议是,别带包来。但是按照行程,如果选手参与了之前的行程,他很难不带包,除非把包扔给教练让他们带回宾馆。于是很多人都带了包。
我压根没参加之前的活动,所以来得很早,场地还没有人,只有欢迎乐队。
然后我就看着选手们陆续带着包来安检,安检了整整一个小时还没安检完。
开幕式就不提了,反正翻来覆去也就是那些东西。我已经数不清我参加过多少次开幕式了。
而在正式比赛日之前,还有一天官方组织的参观活动,参观的是一个科技馆类似物。外面看是这样的。这是一个球形建筑,你从外面就能看到里面是一层层的。参观方式就是坐电梯到最高层,然后一层一层往下走,边走边参观。
整个场馆大部分的文字讲解都是三语:哈萨克语、俄语、英语。而很多官方人员都会三语,也是非常厉害了。我在这里遇到了以前学校里的副领队,他懂俄语。我问他俄语跟哈萨克语有多大区别,在我看来字母差不多,也可能是因为我都不认识。他说差别还是挺大的,完全不同的两种语言,他反正是看不懂。
比赛场馆长这样。
场馆内部提供了很多娱乐设施以及科技展台。这也是老传统了。选手这些天没事都可以来玩,以及比赛的时候都是教练和闲杂人等在玩。而我们的宾馆楼下甚至还有一个蒙古包类似物,里面是这样的。
感觉没事闲着的时候往里面一躺,一躺躺一天,也是挺带劲的。
然后本来以为这次的比赛到此就可以顺利地进行了,没想到最大的幺蛾子在比赛前一天晚上出现了。
当天晚上在酒店,我都已经洗澡准备睡觉了。就在我洗澡的时候,来了三个电话,没接到。然后等我洗完澡一看,说是出大事了,题目有问题,速来。之所以叫我,是因为那题是我出的。我就不说是哪个题了,如果有读者了解过全部的题目,应该能自行猜出。
起因是这样的。我们一般比赛前一天会把题目共享给比赛讲解员,让他们提前知道题目是啥、怎么做,这样他们就可以提前录制题解,比赛的时候也能更好地分析。然后这个题,开头先是一个分类讨论,根据贪心只有两种情况。然后他们在录制题解的时候,越录越觉得不对劲,然后就说,为啥只有两种情况啊?
然后本着严谨求实的工作精神,有人写了个暴力对拍,也就是写了一个枚举所有情况的程序,然后看哪个解最优。然后他们发现,这程序跟官方数据给的结果不一样,这个程序结果更优。
完蛋,那肯定是暴力枚举对啊,官方数据有错,标程全错。
这个时候已经快要晚上九点了,距离比赛开始还剩12个小时。然后他们开始摇人。我们好多人都被摇下去了。我们发现,这题真是太好错了。我们所有做了这道题的人,都是想当然地就忽略了其他情况,而且是完全独立地想当然。
大佬们在考虑的问题是,这题按照现在的情况,怎么改能迅速抢救。我们其他人在考虑的问题是,这题不改还能不能救。
以前的总决赛发生过类似的事情。当时我不是裁判,但是我阅读了当时官方提供的赛后分析。他们说,比赛前夜,他们发现有一道题完全错误,根本没得救,而比赛题目已经打印完毕并且封装了。于是,他们当天晚上干的事情就是,打开封装,把订书机的钉子抠下来,取出错误题目,插入另一道正确题目,订书机订好,然后重新封装。据说这事干了将近一宿,到最后所有人都已经是拆钉子大师了。
这次问题似乎没有那一次那么严重。我们忽略的情况只在特定数据范围内有用,我们可以把数据范围缩小两倍,这样这种情况就完全没必要考虑了。而这样观感会非常好,因为根据当时数据范围给出的形式,如果缩小两倍,纸面上看起来就是个印刷错误,而不是题目错误,这样神不知鬼不觉地就能把这事掩盖过去。只需要现场发一个全场通知即可。
然后大佬们就在跟各种人打电话联系,说明天可能要干这个事情了,要提前做好准备。
然后我们剩下的人就在讨论,这题不改还能不能救。结果发现,还真能。我们确实漏了个情况,但是好像只漏了一个情况。也就是说,把那个情况加上,并不会影响这题解法的时间复杂度。于是我们好几个人就开始改程序。这个时候已经十点了。
然后过了二十分钟,第一个人改好了。然后又过了五分钟,我也改好了。然后接下来的一段时间,陆陆续续又有人写好了,其中有些人是从零开始重写的。我们对拍了一下,发现没问题。然后用那个暴力枚举程序生成的数据测了一下,发现也没问题。于是我们获得了正确的解法,这次危机算是顺利度过了。
然后就是,我们用新的标程重新跑了所有数据,并且根据新的情况加了很多数据。然后等一切都忙完,已经是十一点半了。好消息就是,不用发通知了,题目完全不用改,真正做到了神不知鬼不觉。坏消息就是,这题好像变难了很多。这个情况属实是不容易想到。如果比赛的时候错了,你很难知道是自己程序写错了,还是漏情况了。如有必要,你可能需要浪费键盘时间(也就是用电脑的时间,三个人只有一台电脑)来对拍。
时间转眼来到第二天。比赛正常进行。然后作为出题人,我发现这个题的难度似乎远超我一开始的想象。先不管那个最后的情况,正常情况下应该是很多队伍提交,然后错在那个额外的情况。而实际情况是,压根连提交都没有。最终三个小时之后才有正确提交,成为全场前三的难题。
然后我们密切关注了这个题的每一个提交。我们发现,当时所有第一次提交这道题的队伍都漏了这个情况,没有一次直接成功的。这个题果然还是太好错了。
换言之,如果我们昨天晚上没有发现这个情况,大概比赛还是能正常进行,压根就不会有人注意到,也没人会受到影响,因为没人在错之前能想到这个情况。直到很久很久之后,当数据都被公布了之后,大概才会有人前来鞭尸吧。
比赛的时候,有裁判闲来无事,把题目扔给了 AI,让它们做。最后的结果,我没记错的话,能直接完整写出程序然后正确的题目只有两道还是三道来着,而且还不是最简单的那几道。感觉这个时候 AI 的实力还是忽高忽低,有待稳定,且有待提高。此时此刻,谁又能想到仅仅一年之后 AI 就能碾压人类,直接 AK 了呢。
最后恭喜北京大学再次拿到冠军!罚时领先将近300,也是实力的体现了。
最可惜的还是清华大学,他们距离他们的第一个世界冠军,只差一个测试数据。外人只看积分榜,会觉得他们有两个题在错,很可惜。但是作为裁判,我们能看到,他们有一个题距离通过,就只差最后1个测试数据。我们再三观察也没发现那个测试数据有什么特别之处,然而他们最后也没能找到这个错误,实在是太可惜了!
巴库总决赛多日游。
今年总决赛,对我而言,终于一切正常了。从头到尾什么问题都没出,属实是非常不易了。
行程依旧从签证开始,然而我免签,所以这一步可以直接跳过了。我后来听说,其他不少人在签证上都遇到了问题。不是签证本身的问题,是签证费的问题。据说那个网站可以在网上用信用卡缴费,然后大家主打一个一交一个不吱声。每次付款,都被信用卡机构风控拦截。换张信用卡,照样拦截。最终大家要么用一家风控特别差的银行的信用卡,要么打电话给客服让他们帮着搞,反正很烦就是了。也不知道为啥这签证费的网站风险这么高。
本来这事跟我啥关系没有,结果没想到后来在现场的时候,回旋镖还是打到我了。完全不是签证网站的问题,是阿塞拜疆网站的通病。这是后话。
我这次吸取了埃及时的教训。来都来了,肯定要把周边玩一圈。然后我提前来了一天,自付了宾馆钱,然后订了个一日游。然而后来我发现,我还是太年轻了。有个人提前两周就来了,把附近的高加索地区,也就是阿塞拜疆、格鲁吉亚、亚美尼亚,全都玩了一圈。说实话,这其实挺危险的,要知道,阿塞拜疆跟亚美尼亚几年前这个时候还在打仗呢。不过现在至少分别去这几个国家旅游已经没什么问题了。
提到亚美尼亚,还有个趣事。在阿塞拜疆被官宣为举办地的半年之前,亚美尼亚就发布了通告,说亚美尼亚提交了2025年办总决赛的申请。当时网上啥消息都没有,你上谷歌搜索2025年在哪里办总决赛,跳出来的预测就是亚美尼亚。然而最终被阿塞拜疆截胡了。考虑到这俩国家近些年的恩怨……不知道这些事情之前是不是有联系,也是十分有趣了。
我来到阿塞拜疆第二天,开始了我的一日游。首先,我们参观了历史可以追溯到数千年前的戈布斯坦岩画。
在那里,我看到了很多奇特的岩画。
还有这种一看就不是史前遗物的画。
据说当地有蛇,所以能走的路都用绳子圈起来了。然后路边会撒一些绿色不明粉末,据说是用来驱蛇的。
然后我们参观了泥火山。顾名思义,这里的火山能喷出泥。
当时天气非常炎热,但是那泥巴是冰凉的,你敢信么。向导建议我们用手摸一下泥巴体验一下,然后我就体验了一下。团里还有人把泥巴抹到了胳膊上,甚至是脸上。这是想把天然泥火山当作面膜来用么。
然后我们来到了这个据说是世界上第一口工业钻探油井,建于1846年。
然后还见到了这个世界上最大的国旗。我上网一查,它还真拿过世界纪录!这居然是个地标景点。当天风不大,这国旗很难拍就是了。
然后我们参观了燃烧山,一处常年燃烧的天然火焰山壁。这里的山一直在喷火。
然后是拜火庙,一处历史上与拜火传统有关的宗教场所,过去因地下天然气自然逸出而长年燃烧。但是据导游说,后来天然火焰已经熄灭,现在燃烧的是由地下管道输送过来的天然气。
然后这一天的行程结束。感觉着实是打卡了好多地标景点。
在比赛前一天,在我们结束了所有的工作之后,我和另外两个欧洲人决定去城里逛逛,行程的重点就是巴库古城。然后我们就开始看怎么去,然后我就被之前的回旋镖打中了。我们下了个当地的 App,试图在网上买公交卡、地铁票之类的东西。然后信用卡直接就给拒了。然后怎么买怎么拒。最后我们放弃治疗了,决定去地铁站看着办。
怎么坐地铁?谁知道呢。根据他们的说法,弄清楚怎么坐地铁本来就是旅程的一部分。然后我们就走去了地铁站。途中还遇到了阿塞拜疆当地的学生,被拦下来问,要怎么提高算法竞赛的实力。我们说了一堆车轱辘话,最终的结论还是,多练就能提高。
不过可以理解就是了,新学生就是会有迷茫期。现在 Codeforces 上,不算 Gym 都有上万题,实在是看着就很劝退。
我们走到地铁站,发现只能用现金买票。然后我们没有现金。然后有个路人看我们在那里蒙圈,送了我们一张地铁卡,里面有正好能坐两次的钱。其实我们并没有听懂他说了啥,他反正就把卡送我们了。
然而我们还差两张票。于是只能去外面的 ATM 取钱,然后总共取了大概20块钱。就这个取钱额度,借记卡的手续费怕是要远超过取出的钱本身了。
我们坐地铁来到了巴库古城。步行参观了一个小时。
当我们参观完了巴库古城之后,是时候决定怎么回去了。这两位欧洲人觉得天气不错,决定走回去。于是我们仨人开始往宾馆走。说实话,天好热,太阳好大,我还没涂防晒。不过看上去这两位是完全不在乎的。
路上还看到了一些颇有设计感的建筑物。
不过感觉最近见到的最有设计感的建筑应该是比赛场馆旁边的盖达尔·阿利耶夫中心。相比之下,比赛场馆都没什么好拍的。
风平浪静地来到比赛日。
场地外没有人,果断拍照留念。
风平浪静地完成比赛。恭喜圣彼得堡大学以全场唯一11题的成绩拿到冠军。他们能做出那道防退场题,证明了他们的冠军实至名归。
那道题,从去年就开始准备了,是当时的两道防退场之一。去年赛前,我们觉得这道题完全没准备好,没法用,于是留到了今年。今年经过了充分的准备和化简,去掉了一开始存在的很多更复杂的情况。用出题人的话说:我们已经想尽办法让这个题变得可做了。然后它就被做出来了。你永远可以相信总决赛队伍的实力。
今年总决赛,还有一点值得注意的是,AI 也申请来参加这次比赛的非正式评测了。主办方给 OpenAI 和 Google DeepMind 各自准备了一个单独的评测机器,让它们独立运行完成比赛。然后,就没有然后了。Google DeepMind 开场非常顺利,很快就通过了10题。这个时候主办方已经有点慌了。而后 OpenAI 直接 AK 了比赛,这下彻底碾压了。主办方要求两家公司在比赛结束两周后才能公布结果和细节。我猜大概是因为不想让它们抢了选手的风采吧。
我后来跟 Google DeepMind 的人聊过了。以现在 AI 这个实力,以后就不应该是 AI 公司申请来参赛,而是主办方需要提供一个专门给 AI 参赛的平台。转瞬之间,攻守之势易也。
在比赛结束之后的一个月,这比赛还有后续。我们决定开一个复盘大会。说实话,去年出了那么大幺蛾子都没开复盘大会,今年要开,顺便就把去年的补上了。这个大会最大的讨论点就是,我们是咋整出这么多幺蛾子的。讨论的结果就是,选题的时候,还是更多的人看着比较好。于是决定,在选题委员会多加几个人。
首先就是 tourist 一定要加入。他见多识广,最能发现题目的问题,尤其是这题如果在别的比赛中出现过,他是最有可能发现的。毕竟其他裁判大都不怎么在网上参赛。
然后就是,有一个大佬说,要不然把今年裁判全加进去算了。而另一个大佬说,那最后决定选题的时候,讨论量岂不是直接爆炸。最终的结果是,剩下的人就全凭自愿。
然后我就自愿进去了。最后发现,只有我自愿进去了,略显尴尬。