楼天城,两次ICPC世界第二,两届谷歌编程赛冠军,公司上市那天说耽误了一场比赛
计算机竞赛传奇人物
2024年11月27日,小马智行在美国纳斯达克上市。联合创始人楼天城站在台上敲钟,身上的西装是前一天在纽约临时买的。
小马智行做的是无人驾驶出租车。截至2026年6月底,它在路上跑的车有1975辆。在北京、上海、广州、深圳的一些城区,用手机就能叫到这种车,驾驶座上没有司机。楼天城是这家公司的CTO,管技术。
上市当天接受采访,他却说起了另一件事:
这次要不是上市,我还要参加。上市耽误了一个比赛。
他说的是编程比赛。记者问他:公司做到这么大,每天这么忙,怎么还在坚持比赛?
他说:"总要娱乐一下。"
记者追问:别人眼里那么大的挑战,在您这儿只是娱乐?
"这确实是我内心的真实想法。"
他从2001年开始打编程比赛,到这一天,已经打了二十多年。编程竞赛圈里的人,叫他"楼教主"。
多学三个月新知识
楼天城1986年生在山东济南,小学六年级跟着父母搬到了杭州。
初三下学期,他拿到了保送高中的名额。他在年级排第五,前四名保送去了杭二中和学军中学,轮到他,只能保送杭州十四中。妈妈想让他参加中考,冲一冲杭二中。他不愿意,说:
我如果参加中考,要再学三个月旧知识,我保送十四中,就能多学三个月新知识。
十四中给提前保送进来的学生开了三个月信息课,他在这门课上第一次接触编程。教信息学的李建江老师记得,他常常下午一下课就进机房,走得比老师还晚。老师先走,临走前叮嘱一句:"天城记得把门锁好啊。"
高一上学期,学编程才半年,他就拿了全国青少年信息学联赛浙江赛区一等奖。2003年,他在NOI上考了全国第8名,拿到一等奖。NOI是全国青少年信息学奥林匹克竞赛,是这门学科的全国决赛。
2004年,他代表中国去希腊雅典参加IOI,也就是中学生的编程世界赛。他考了530分,全球第3,拿了金牌。那一届中国队四个人,拿回四块金牌。
同年秋天,他保送进了清华计算机系。第二年,图灵奖得主姚期智在清华办起计算机科学实验班,就是后来的"姚班",他成了第一届学生。
他比赛用的网名叫ACRush。AC是编程比赛里的说法,意思是题目做对了。进清华两年后,"楼教主"这个外号就传开了。浙江大学编程竞赛队的教练王灿这样说他:"只要比赛有他在,别人就只能想着怎么拿个第二名。"
系统测试之后
2006年,谷歌办的编程大赛Code Jam,总决赛放在纽约。
这场比赛的计分方式有点特别。比赛进行时,交上去的程序只用几组简单的数据检查一下。比赛结束后,系统会拿出一大批事先藏好的数据统一测试,叫"系统测试",只要有一组没通过,这道题就算零分。答题和系统测试之间,还有一段"挑战"时间:选手可以自己造数据,去测别人的程序,测出错来就能加分。
挑战时间快结束的时候,他随机生成了一组很大的数据,拿去测一位波兰高手做的最难的那道题。系统给出的结果是:挑战成功。这一下加了50分,他排到了第一。
接下来是系统测试。
他有两道题没通过。一道是有个数算得太大,超出了程序里变量能存的范围;另一道是计算到一半,有个关键的数没有及时存下来。
他从第一名掉到了第36名。2009年,他回忆这场比赛时写道:
这两个错误至今刻骨铭心。
领先了3分钟
ICPC是大学生的编程世界赛,三人一队,比五个小时。排名先看做出几道题;题数一样,再比罚时。罚时是每道做对的题从开赛到做出来所用的分钟数加在一起,每交错一次,再多算20分钟。
2007年3月,楼天城第一次参加ICPC世界总决赛,比赛在东京。两个队友鬲融、胡伟栋,正是2004年和他一起去雅典的IOI国家队队友。
那场比赛他状态不好。有一道题交错了7次才通过,全场下来,他交错了10次以上,罚时越积越多。
第227分钟,清华做出了I题,第一次排到全场第一。那时做出6道题的只有波兰的华沙大学,其他队伍都没超过5道。他后来写道:
可是幸福只持续了短暂的3分钟。
华沙大学做出了第7题,和清华题数一样,罚时却比清华少,名次反超。他记得,华沙队员当时"几乎疯狂"。
最后73分钟,清华没有再做出一道题,华沙又做出了第8道。
比赛刚结束,俄罗斯选手Petr Mitrichev特意跑来问他们:第8题做出来没有?
没有。清华做出7道,排第二。
领奖的照片上,清华的队员和教练脸上没有一点兴奋。个子最高、咬着嘴唇的那个,就是楼天城。
等了两年
2008年11月,Code Jam总决赛在美国山景城的谷歌总部举行,100名选手,比3个小时。
赛前,他借另一位选手说过的话,形容自己有多想赢:"我虽然获过很多奖,但是缺少一个世界冠军。"纽约那次丢了冠军之后,他写道,"一等就是整整的两年"。
这一年的规矩是:每道题分小数据和大数据两档。大数据要选手自己下载,下载后8分钟之内必须交上答案,超时就作废。
开场不久,南非选手bmerry就领先了。不到两个小时,他把所有题都做完了,只剩C题的大数据。楼天城却被B题卡住,前后花了100分钟,没做出来。
第2小时40分,他看排行榜时发现,bmerry已经试过C题的大数据,超时了。C题分数比B题略高,要想超过bmerry,他必须做出C题的大数据。
C题他没想出正经解法,只写了一个笨办法:把可能的情况一个个试过去。他自己说,"心里很没底"。
第2小时52分,他下载了大数据,让这个程序跑起来。
程序跑了1分多钟,停了,答案出来了。交上去,通过。
谷歌赛后的公告写道:比赛还剩6分40秒时,ACRush冲到了第一。
1分钟后,中国选手朱泽园也做出了这道题,用时比他多一点,排第二。bmerry排第三,只比他们少2分。
他在回忆里写:
终于获得了第一个世界比赛的冠军。
2009年,他再次拿下Code Jam冠军。同一年,他第二次参加ICPC世界总决赛,地点在瑞典斯德哥尔摩。清华和俄罗斯的ITMO大学都做出了9道题,清华罚时更多,排在第二。
2011年,有记者问他:两次总决赛都是第二,遗憾吗?他说:
遗憾当然会有,但不会太多。我觉得做一件事情最重要是享受过程,结果并不是最重要的。
他最多只比我好一点
2006年纽约那场,冠军是Petr。2007年东京赛后跑来问第8题的,也是他。
那些年,编程高手们常在一个叫TopCoder的网站上比赛,每场按表现算积分。楼天城和Petr在赛场上碰过很多次,几乎每次都是楼天城输。有一年过年回家,他专门花时间研究Petr的打法,结果越研究越郁闷:
他最多只比我好一点,但偏巧他就能克我。
2009年3月,Petr在博客里写,自己在TopCoder的第一名被ACRush拿走了,而且已经被拉开不少,主要是对方发挥得太好。他还补了一句:"干得漂亮,Lou!"
2010年9月,楼天城的积分涨到3902,是当时TopCoder有史以来的最高分。2011年7月,Petr打到3923,超过了他。
2024年,楼天城提起这段往事:
其实在我这段生涯中有一个俄罗斯人,一直压制我很多年,他整体很强,我唯一超过他的那两年,就是他刚生娃了,可能心思有点涣散,被我超过两年,他娃长大他又回来了。
从谷歌到小马智行
2012年,他在清华博士毕业,导师就是姚期智。之后他进了谷歌,参与过谷歌的无人车项目,后来又先后在问答网站Quora和百度工作。2016年12月,他和彭军一起创办了小马智行。
当了CTO,他给自己定了一个目标:给公司招更多比自己厉害的人。
2022年12月,Meta公司办的编程大赛Hacker Cup进行总决赛,全世界只有25个人进了决赛,他是其中一个。
他和冠军同样是84分,用时比对方多,输了。
又是第二。