“星环杯”的比赛时间,是从周五晚上八点,到周日晚上八点,整整四十八小时。
这四十八小时,对我来说,不仅仅是一场比赛,更是一场豪赌。我赌上的,是母亲的希望,是我自己的未来。
我没有退路,只能赢。
周五下午,我用身上仅剩的几百块钱,买了两箱泡面、几根火腿肠和几大瓶矿泉水。这些,就是我未来两天的全部给养。我还特意去药店给母亲多买了一盒止痛药,以防万一。
“墨墨,你……你真的退学了?”母亲醒来后,看着我搬回来的“粮草”,浑浊的眼睛里写满了担忧,“学校的事,妈听邻居说了。是不是他们欺负你了?”
我挤出一个轻松的笑容,坐在床边,帮她掖好被角:“妈,没有谁欺负我。是我自己不想念了。我觉得,上大学不是唯一的出路。我有别的办法能赚到钱,给您治病。”
“傻孩子,你能有什么办法?”母亲叹了口气,吃力地抬起手,抚摸着我的脸颊,“妈知道你聪明,可你才十八岁,社会哪有那么容易闯?听妈的话,回学校去,给校长认个错。高考才是正道,别为了跟人置气,耽误了自己一辈子。”
我知道,跟母亲解释什么是“星环杯”,什么是算法竞赛,她也无法理解。我只能握住她冰凉的手,用一种前所未有的坚定语气说:“妈,您相信我。给我两天时间,就两天。两天后,我一定给您一个满意的答复。”
看着我眼中的决绝,母亲最终没有再说什么,只是眼中的忧虑更深了。
晚上七点五十五分,我准时坐在了电脑前。
我戴上耳机,隔绝了窗外城中村嘈杂的喧嚣。屏幕上,是“星环杯”的官方网站,鲜红的倒计时在不断跳动。
五、四、三、二、一!
八点整,页面自动刷新。八道题目,如同八座沉默的山峰,同时出现在我面前。
我的心跳瞬间加速,血液仿佛在血管里奔腾。
我没有急着去做第一题,而是快速将所有题目浏览了一遍,在脑中迅速评估它们的难度、考点和解题思路。
第一题,签到题,一道基础的字符串处理,用来给选手热身。
第二题,数据结构,考察的是复杂的树状数组嵌套。
第三题,动态规划,经典的背包问题变种,但加了多重限制。
……
第七题,计算几何,问题模型非常复杂,需要用到旋转卡壳算法。
而第八题,那道压轴题,果然和我预想的一样。题干描述了一个庞大的物流配送网络优化问题,其核心,正是我研究过的“蚁群优化与模拟退火混合算法”。
我的心,彻底定了下来。
这场比赛,就像是为我量身定做的一样。
我深吸一口气,双手放在了键盘上。
开始!
第一题,我只花了三分钟,便写好了代码,提交,一次通过(Accepted)。
排行榜上,我的ID“M”第一次出现,排在了几百名开外。因为在我之前,已经有几百个来自世界各地的顶尖高手,用更快的速度完成了这道热身题。
我不为所动,立刻投入到第二题的攻坚中。
时间一分一秒地流逝。
房间里只剩下我敲击键盘的清脆声音和主机风扇的嗡嗡声。我的精神高度集中,整个世界仿佛都消失了,只剩下屏幕上那些不断跳跃的代码和逻辑符号。
第二题,树状数组,我用了一个小时。
第三题,动态规划,我用了一个半小时。
第四题,图论,我用迪杰斯特拉算法的堆优化,花了两个小时。
当第四题的绿色“Accepted”标志亮起时,时间已经来到了午夜。我抬头看了一眼排行榜,“M”这个ID,已经悄然爬升到了全球第37位。
排在我前面的,是一串如雷贯耳的名字:来自斯坦福的“CodeWizard”,来自莫斯科大学的“Petr”,还有去年冠军、麻省理工的“Zeus”……他们都是这个圈子里成名已久的大神。
而我,一个来自中国偏僻小城,刚刚退学的高中生,一个无人知晓的“M”,正悄悄地追赶着他们的脚步。
我拧开一瓶矿泉水,灌了几口,又掰了半根火腿肠塞进嘴里,算是补充了能量。
短暂的休息后,我继续向第五座山峰发起冲击。
第五题是一道数论题,需要用到扩展欧几里得定理和中国剩余定理,计算量和逻辑复杂度都呈指数级上升。
我的大脑像一台高速运转的CPU,无数的公式和定理在其中碰撞、组合。草稿纸上,密密麻麻的推演过程很快就写满了一页又一页。
凌晨四点,窗外已经泛起了鱼肚白。
伴随着最后一次提交,屏幕上终于跳出了绿色的“Accepted”。
我长长地舒了一口气,感觉整个后背都已经被汗水浸透。
再看排行榜,“M”已经冲到了全球第11位!
在我前面,只剩下了十个神仙。而去年的冠军“Zeus”,此刻也仅仅是解出了五道题,排在第9位,用时比我稍短一些。
我和世界最顶尖的大脑,只隔着一道题的距离!
巨大的疲惫感袭来,我的眼皮像灌了铅一样沉重。我知道,我必须休息一下了,否则身体会先于大脑崩溃。
我设了一个两小时的闹钟,顾不上洗漱,直接和衣倒在了床上,几乎是秒睡。
梦里,我又回到了那个大礼堂。张建国和张浩父子俩,正站在台上,指着我,用无比轻蔑的语气嘲笑着我的不自量力。台下所有的同学,都用看小丑一样的眼神看着我。
“林墨,你完了!”
“一个穷鬼,还想跟我们斗?”
“离开学校,你什么都不是!”
冰冷而尖刻的话语像刀子一样扎进我的心里。
“不!”
我猛地从梦中惊醒,心脏狂跳不止。
我看了一眼手机,才睡了一个小时。窗外天光大亮,城中村的早晨,已经充满了各种叫卖声和嘈杂的人声。
我用力晃了晃昏沉的脑袋,用冷水洗了把脸,强迫自己清醒过来。
不能睡了。
那些轻蔑和嘲笑,还在耳边回响。我必须用行动,把那些声音彻底击碎!
回到电脑前,我泡了一碗面,狼吞虎咽地吃完,然后继续投入战斗。
第六题,是一道极其刁钻的博弈论问题,需要用到SG函数。
这一题,成了我和前面十个大神的分水岭。
我花了整整一个上午,尝试了三种不同的算法,提交了七八次,返回的结果都是“WrongAnswer”或者“TimeLimitExceeded”。
排行榜上,前十名的大神们也同样陷入了僵局。一整个上午,没有任何人成功解出第六题。
全球顶尖的头脑,在这一刻,被同一道难题集体卡住了。
我没有气馁,反而更加兴奋。越是困难的挑战,越能激发我的斗志。
我把自己关在房间里,不吃不喝,不闻窗外事,脑子里只有那道题。我一遍遍地审视我的代码,寻找那细微的逻辑漏洞。我将整个博弈过程在脑中推演了上百遍,试图找到那个隐藏在迷雾中的必胜策略。
周六下午三点,在我第十二次提交代码后,那个熟悉的绿色“Accepted”终于出现了!
我成功了!
我激动得差点从椅子上跳起来!
我立刻刷新排行榜。
“M”这个ID,赫然出现在了全球第一的位置!
我是全世界第一个,解出第六题的人!
此刻,距离比赛开始,过去了三十一个小时。
这个成绩,瞬间引爆了全球极客圈的关注。在“星环杯”的官方论坛和一些技术交流群里,关于“M”的讨论炸开了锅。
“M是谁?一个新的大神?”
“**!他解出了那道SG函数题!我被卡了10个小时了!”
“他是中国人吗?ID只有一个字母,太酷了。”
远在江城的我,对此一无所知。
短暂的兴奋过后,我立刻让自己冷静下来。现在还不是庆祝的时候,比赛还没有结束。
排在第二的“Zeus”,在五分钟后,也成功解出了第六题。紧接着,“Petr”和“CodeWizard”也相继攻克了这道难关。
我和他们的差距,微乎其微。
胜负的关键,就在最后的两道题。
第七题,旋转卡壳。
第八题,蚁群模拟退火。
这两道题,才是真正的决战!
而这两道题,恰恰都是我的强项!
我仿佛进入了一种“心流”状态。我的思维从未如此清晰,我的手指在键盘上翻飞,代码像流水一样从指尖倾泻而出。
周六晚上十点,第七题,解决!
我的排名,再次巩固在了第一位!
此时,排行榜前四名,都解出了七道题。但我的用时,比第二名的“Zeus”快了将近两个小时!
这是一个巨大的优势。
只要我能率先解出第八题,冠军就将毫无悬念!
然而,第八题的难度,超出了所有人的想象。它不仅仅是算法的套用,更是在海量数据和复杂约束条件下,对算法性能的极致考验。
我写出的第一版代码,在测试一个小样本数据时,就跑了足足半个小时。而比赛的官方数据集,比这个要庞大上万倍。
必须优化!极致地优化!
时间进入了最后的二十四小时。
我几乎不眠不休,双眼布满了血丝,大脑因为过度运转而阵阵刺痛。**着一口口的凉水和强烈的意志力支撑着。
我不断地修改参数,调整算法结构,优化内存占用,用各种剪枝技巧来减少不必要的计算。
每一次微小的改进,都可能让运行时间缩短几个小时。
周日中午,我终于完成了算法的最终优化。
我将代码提交到了评测系统。
这一次,等待的时间格外漫长。
一分钟,两分钟,五分钟……
评测系统一直在显示“运行中”。
我知道,这是因为数据量太庞大,程序正在服务器上疯狂地计算。
我的心提到了嗓子眼,手心里全是汗。
成败,在此一举!
就在这时,房门被“砰”的一声推开了。
班主任李老师和陈胖子闯了进来,他们身后,还跟着一脸铁青的校长张建国,以及幸灾乐祸的张浩。
“林墨!你果然在这里!”李老师看到我憔悴的样子,又急又心疼,“你这两天跑哪里去了?电话也不接!快跟我回学校去!校长同意再给你一次机会了!”
张建国背着手,用一种居高临下的姿态审视着我这间破旧的出租屋,眼神里充满了鄙夷。“林墨,闹够了没有?我已经跟清华那边打过招呼了,只要你回去好好参加高考,凭你的成绩,考个次一点的专业还是有希望的。别再自毁前程了。”
张浩则在一旁阴阳怪气地笑道:“哟,这不是我们的大天才吗?怎么躲在这种地方打游戏呢?怎么,退学了,就这么自甘堕落了?啧啧,真是可怜啊。”
我的目光,死死地盯着电脑屏幕。
我没有理会他们。
我的整个世界,只剩下那个不断旋转的“运行中”图标。
“林墨!你听见没有!”张建国见我无视他,顿时怒火中烧,“我最后给你一次机会!现在,立刻,关掉你那破电脑,跟我回学校!”
说着,他竟然直接伸手,要去拔我的电源线!
“不要!”我猛地回头,发出一声怒吼,眼睛里布满了血丝,样子像一头被激怒的野兽。
我的吼声镇住了他们。
就在这千钧一发之际,屏幕上的“运行中”图标,终于停止了转动。
一个鲜艳的、巨大的、绿色的单词,跳了出来。
——通过!