ICPC 世界总决赛2014

第一次参加总决赛,两题收场,惨败而归。

这是我第一次参加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次错误提交,正确提交出现在比赛倒数第二分钟,也是非常极限了。

排除这些小花絮,我们全队都很沮丧,然后一致决定明年再战。

ICPC 世界总决赛2015

第二次参加总决赛,做完了所有简单题,略有遗憾。

鉴于去年的表现实在是太拉了,这一年我们决定好好准备。

队内三人分工已经十分明确。我是负责代码题和各种花里胡哨算法的人,于是在这一年里我学了非常多的算法,有很多是以前听都没听说过的,比如半平面交,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选手生涯正式结束。