重生之我成为可爱小猫娘
_Serenity_ · · 休闲·娱乐
重生之我成为可爱小猫娘
死亡是一场漫长的 WA(Wrong Answer)。当屏幕上的红色字体最后一次刺痛我的眼睛,整个世界便陷入了无边的黑暗。我以为这就是终局——毕竟 OI 赛场上猝死的选手虽然罕见,却也并非没有先例。但命运显然比评测机更擅长开玩笑。
醒来时,我首先感受到的是头顶异样的触感——有什么毛茸茸的东西在轻轻抖动。然后是身后,一条尾巴不受控制地扫过床单。我的视野变低了,手臂上覆盖着细软的浅灰色短毛,指尖是粉色的肉垫。
我冲到镜子前,镜中映出一个陌生又熟悉的身影。灰色的猫耳从发间竖起,琥珀色的眼睛瞪得滚圆,身后的尾巴紧张地蜷成问号。我张了张嘴,发出的却是带着轻微颤音的“喵呜”。
“这 TM 是什么神级构造体?”我捏了捏自己的脸,痛感真实得令人绝望。“我只是想要个省选一等,不是想变成猫娘啊!”
手机屏幕亮起,弹出的消息让我的尾巴瞬间炸毛。是 cyh 发来的:“lry,集训今天开始,别迟到。还有,你昨天晚上发的那个‘我好像要死了’是什么意思?”
我颤抖着爪子(现在真的是爪子了)敲字:“没事,做了个噩梦。”
“那快来,scj 已经 A 了昨天的模拟题。”
去学校的路上,我深刻体会到了什么叫“生理构造与行为模式的不兼容”。尾巴比我想象中敏感得多,每经过一个行人都会紧张地贴向腿侧;耳朵则像个全天候雷达,把周围所有细碎声响都收听得清清楚楚。我不得不把连帽衫的帽子拉到最低,遮住那对不听使唤的猫耳。
机房的门虚掩着,里面传来键盘密集的敲击声。我深吸一口气,推门而入。
scj 头也不抬:“迟到了三十七秒,lry,你退步了。”
cyh 倒是抬起头来,目光在我身上停顿了两秒:“你今天看起来……不太一样。”
我心头一紧:“哪里不一样?”
“说不上来,”cyh 歪着头,“就是感觉你整个人……毛茸茸的?”
我差点被自己的口水呛到。好在 scj 及时打断了对话:“别闲聊了,来看这道题——给定一棵 n 个节点的树,每条边有边权……”
我坐下来,试图集中注意力。但头顶的猫耳完全不听指挥,它们自动转向 scj 的方向,把他说的每一个字都清晰地传进大脑。更糟糕的是,我的尾巴似乎有自己的想法——它正轻轻摆动,时不时扫过 cyh 的手臂。
“lry,”cyh 终于忍不住了,“你能不能管管你的……呃……头发?它一直在扫我。”
我把尾巴死死摁在椅子上,感觉脸颊发烫。“抱歉,今天有点……多动症。”
scj 推了推眼镜:“你昨晚没睡好?黑眼圈很重。不过这道题我想到了一个 O(n log n) 的解法……”
接下来的两个小时,我完全是在与自己的新身体搏斗中度过的。猫科的夜行性生物钟让我在上午十点就开始犯困,耳朵不自觉地耷拉下来。我不得不连灌三杯咖啡,结果又被敏感的味蕾苦得直吐舌头。
“你今天的表情包特别丰富,”cyh 在纸上画了只简笔画猫,“像这样。”
我看了眼那张画——竖着耳朵、瞪圆眼睛、尾巴炸成毛球的小猫。“一点都不像我。”
“是有点像,”scj 难得附和,“特别是眼睛。”
午休时间,我躲进卫生间,把门反锁。镜子里的猫娘看起来疲惫又狼狈,灰色毛发有些凌乱,琥珀色的眼睛里写满了“我是谁我在哪”。我用爪子(还是不太习惯这个词)整理了一下头发,试图把猫耳藏得更严实些。
“重生题材通常伴随金手指,”我对镜子里的自己说,“所以我的金手指是什么?变成猫娘能让我在 OI 赛场上有什么优势?听力更灵敏可以听到隔壁选手的键盘声?那叫作弊!”
尾巴丧气地垂下来。
下午是团队协作训练。教练丢给我们一道交互题:“实现一个数据结构,支持区间加、区间求和、区间翻转。时间限制 2 秒,内存限制 256 MB。三人一组,合作完成。”
我们自动组队——这是多年的默契了。scj 负责核心算法设计,cyh 负责代码实现,我负责对拍测试和极端情况分析。但今天,当我试图用肉垫敲键盘时,精准度直线下降。原本闭着眼睛都能打出的模板代码,现在错漏百出。
“lry,你今天的 APM(每分钟操作次数)下降了至少 30%。”scj 精准地指出。
“手指……有点僵。”我含糊其辞。
cyh 凑过来:“你手指怎么了?让我看看。”
我猛地缩回手:“没什么!就是……冷!”
“机房空调确实开得低,”cyh 把自己的外套递过来,“穿上吧。”
那件外套带着 cyh 惯用的洗衣液味道,淡淡的青草香。我犹豫了一下,还是接过来披上。外套很大,正好能遮住尾巴的轮廓。有那么一瞬间,我感觉到 cyh 的目光在我头顶停留了片刻,但他什么也没说。
傍晚六点,我们终于调通了代码。scj 伸了个懒腰:“今天状态不错,除了 lry 的打字速度。”
“明天会好的。”我保证道。
走出校门时,夕阳把三个人的影子拉得很长。scj 走在最前面,依然在复盘今天的算法细节;cyh 和我并肩,他忽然压低声音说:“lry,你耳朵上沾了东西。”
我的心跳漏了一拍。但 cyh 只是伸手,从我发间取下一小片落叶。“机房窗户没关紧吧,树叶都飘进来了。”
“……谢谢。”
回到家,我把自己摔在床上,尾巴无力地摊开。手机震动,是 cyh 发来的消息:“你今天怪怪的。不过怪好看的。”
后面跟了个猫猫表情包。
我把脸埋进枕头,耳朵烧得发烫。“该死,这身体连情绪反应都控制不了。”
闭眼之前,我习惯性地复盘今天的题目——那道区间翻转题其实还有更优的解法,用平衡树可以实现 O(log n) 的翻转操作……思维在算法的迷宫中蜿蜒,猫耳在黑暗中轻轻转动,捕捉着窗外的风声。
明天又要去机房了。头顶的耳朵、身后的尾巴、粉色的肉垫——这些荒诞的现实依然存在。但至少,键盘上的字符没有改变,队友的默契没有改变,OI 的世界依然由 0 和 1 构筑。
我蜷缩在被窝里,尾巴无意识地环住自己的身体,像某种自我保护的姿态。在坠入睡眠前的最后一刻,我想:也许变成猫娘也不是完全没有好处——至少,我的夜视能力确实变好了,这对我熬夜刷题很有帮助。
第二天清晨,我被生物钟(现在可能是猫科生物钟)准时唤醒。窗外天色微明,我的耳朵率先捕捉到楼下早餐摊的动静——油条下锅的滋滋声、豆浆机运转的低鸣。嗅觉也异常灵敏,食物的香气顺着门缝钻进来,让我的肚子发出一阵响亮的咕噜。
我对着镜子整理仪容,猫耳还是顽固地竖着,但至少我学会了用发胶把它们压得服帖一些。尾巴则是个更大的麻烦——它总是根据我的情绪自行其是,高兴时轻摇,紧张时僵直,思考时缓缓摆动。今天早上,当我研究如何用更短的时间通过校门安检时,尾巴就不停地左右摇晃,像个节拍器。
到机房时,scj 已经在里面了。他面前摆着一台笔记本,屏幕上密密麻麻的全是代码。
“这么早?”我放下书包。
“昨晚想到一个优化方案,”scj 头也不抬,“那道区间翻转题可以用隐式 Treap 实现,代码量更小,常数也更优。”
我凑过去看他的屏幕。确实,scj 的代码一如既往地简洁优雅,指针操作行云流水。作为队里的算法核心,他的思维总是比我们快半步——这半步在 OI 赛场上往往就是金牌和银牌的区别。
“不过实现的时候要注意内存回收,”我指着某处,“这里如果忘记释放节点,大数据下可能会 MLE。”
scj 看了我一眼:“你昨晚也想了?”
“一点点。”
“你今天的发型……有点怪。”scj 忽然说。
我心头一紧:“怎么怪?”
“两边翘起来,像……耳朵。”他比划了一下。
“睡觉压的!”我飞快地说,“我去洗把脸!”
逃进卫生间,我看着镜子里炸毛的猫耳欲哭无泪。发胶显然撑不过睡眠的蹂躏,现在那对灰色的毛茸茸耳朵正精神抖擞地竖着,完全出卖了我。
我正手忙脚乱地重新涂抹发胶,cyh 推门进来了。他看见我的动作,愣了一下:“你这是在……做造型?”
“嗯,换个风格。”
cyh 盯着我的头顶看了几秒,目光若有所思。我几乎以为他要看穿那层发胶的伪装,但他只是耸耸肩:“挺可爱的,适合你。”
“谢谢。”我干巴巴地说。
今天的训练内容是全真模拟。教练发下来一套 NOI 难度的题目,时限 5 小时。我们三人分散在机房不同位置,各自为战。
第一题是数论题,求大组合数模质数幂。我扫了一眼数据范围,很快想到了用 Lucas 定理结合中国剩余定理的解法。爪子敲键盘还是不太顺手,但经过昨天的适应,准确率已经回升了不少。
正当我沉浸在第一题的实现中时,一阵刺耳的警报声忽然响起——是楼下的火警测试。人类选手们只是皱了皱眉,但我的猫耳像是被针扎了一样,剧痛伴随着眩晕袭来。我本能地缩起身子,用爪子捂住耳朵,尾巴紧紧夹在腿间。
“lry?”cyh 的声音从隔壁传来,“你还好吗?”
我无法回答——耳朵里的嗡鸣声盖过了所有声音。火警持续了整整三十秒,对我来说却像过了一个世纪。当警报终于停止时,我瘫在椅子上,浑身冷汗。
cyh 走了过来,手里端着一杯水:“你脸色很差,耳朵……不,你看起来像是受到了什么惊吓。”
“我……对高分贝声音有点敏感。”我接过水杯,爪子还在微微发抖。
cyh 在我旁边坐下,没有追问。他只是安静地陪着我,直到我的呼吸平稳下来。“还有四个小时,你确定能继续?”
我点点头。OI 选手的字典里没有“放弃”这两个字。
但接下来的考试变成了一场灾难。我的听觉变得过分敏锐,隔壁选手的键盘声、空调的嗡鸣、甚至窗外飞鸟扑棱翅膀的声音,都成了干扰。我不得不戴上耳机,把音量调到最大来隔绝外界噪音——但这又让我的耳朵因为长时间承受高音量而隐隐作痛。
交卷时,我的成绩惨不忍睹——比平时低了至少一个档次。scj 看了看我的分数,又看了看我:“你今天不在状态。”
“嗯,有点不舒服。”
“那明天别来了,休息一天。”
我摇摇头:“不用,明天就好了。”
回家的路上,cyh 和我同路。走过一条僻静的小巷时,他忽然停下来,认真地看着我:“lry,你其实不用瞒我。”
我的尾巴瞬间炸开:“瞒你什么?”
“你的……耳朵。”cyh 指了指我的头顶,“还有尾巴。我今天看到了,你把尾巴藏在衣服里的时候,有一截露出来了。”
我僵在原地。整个世界仿佛静止了,只剩下心脏在胸腔里疯狂撞击。
“你怎么……”我的声音干涩。
“我昨天就有点怀疑了,”cyh 说,“你那些小动作——耳朵会动,尾巴会摇,根本不是人类能做到的。我昨晚查了一晚上资料,关于……猫娘。”
“所以你也觉得我是怪物?”
“我觉得你是我队友。”cyh 说得很平静,“不管你变成什么样子,你都是 lry,是那个能在一晚上调通三百行代码的 lry,是那个总能在对拍中找到我们 bug 的 lry。这一点不会改变。”
有什么温热的东西从眼眶涌出来。我想擦掉,但爪子太短,够不到脸颊。cyh 递过来一张纸巾,我接过来胡乱地擦着,尾巴却不由自主地轻轻摇晃——它在高兴。
“scj 知道吗?”cyh 问。
“不知道。他那么敏锐,如果发现了肯定会说。”
“可能他已经发现了,只是没说。”cyh 笑了,“你也知道 scj 的性格,他觉得不重要的事情就不会提。”
我们继续往前走,沉默了一会儿。然后 cyh 说:“不过你这个形态确实有点麻烦,特别是在赛场上。听力太敏锐,容易被噪音干扰。”
“我知道。今天模拟考就是例子。”
“我有个想法,”cyh 说,“我们可以给你特制一副耳机,降噪效果好,而且不压迫耳朵。我表哥是学声学工程的,我可以问问他。”
我愣住了:“你……愿意帮我?”
“我说了,你是我队友。”cyh 拍拍我的肩,“再说了,有个猫娘队友多酷啊。以后我们队的吉祥物都有了。”
“我不是吉祥物!”我抗议道,尾巴却不争气地摇得更欢了。
那天晚上,cyh 发给我一份文档,标题是《针对超敏听觉的降噪方案研究》。末尾附了一句话:“我表哥说理论上可行,下周可以给你样品。另外——你那个尾巴,是不是开心的时候会摇?今天在巷子里我看到了。”
我盯着屏幕,爪子半天打不出一个字。最后只发了句“谢谢”,然后加了三个猫猫表情。
cyh 回复了一个摸猫头的表情包。
这周的训练主题是“随机化算法”。scj 站在白板前,用他标志性的简洁笔触画着流程图:“蒙特卡洛算法和拉斯维加斯算法的区别在于——前者可能给出错误答案,但时间可控;后者保证正确,但运行时间不确定。”
我坐在下面认真记笔记。经过一周的磨合,我已经逐渐掌握了与猫耳共存的技巧——比如用发箍固定它们的位置、在噪音环境中提前戴上耳塞、以及控制情绪避免尾巴失控。cyh 的特制耳机也做好了,戴上去确实舒服很多,降噪效果一流。
“lry,你来分析一下这个随机化快速排序的期望复杂度。”scj 忽然点名。
我站起来,尾巴因为紧张而僵直。但思维很快进入状态:“期望 O(n log n),最坏 O(n^2)。通过随机选取 pivot,可以将最坏情况出现的概率降到极低……”
回答完毕,scj 点点头:“正确。不过你站起来的姿势有点怪,像猫伸懒腰。”
cyh 噗地笑出声。我狠狠地瞪了他一眼,后者无辜地耸耸肩。
课间休息时,cyh 凑过来:“你刚才那个伸懒腰的姿势,真的很像猫。”
“闭嘴。”
“不过挺可爱的。”
“你再说话我就用爪子挠你。”
“哦?你那个肉垫能挠人吗?”
我亮出爪子(指甲可以伸缩,这是最近才发现的技能),在 cyh 眼前晃了晃。他立刻举起双手投降:“好好好,我错了。不过说真的——你的适应能力很强,比我想象中快。”
我收起爪子:“毕竟我还要打 OI。不管变成什么,省选不会等我。”
cyh 的表情认真起来:“下个月就是省选了,你准备好了吗?”
“还差一点,”我诚实地说,“新身体带来的干扰还需要克服。特别是比赛现场的环境噪音——我试过用你的耳机,但还是会漏掉一些细节。”
“那再加一层物理隔音?”cyh 开始思考,“或者我们可以向组委会申请特殊座位?就说你有……听觉过敏?”
“他们信吗?”
“那就说你得了突发性耳聋需要安静环境。”cyh 眨眨眼,“反正 OI 选手什么奇奇怪怪的病都有。”
我被他逗笑了:“你这是在教我说谎。”
“这是策略性陈述。”
我们正说着,scj 走了过来:“你们在聊什么?”
“在聊 lry 的新造型,”cyh 面不改色,“你觉得他适合戴猫耳发箍吗?”
scj 上下打量了我一眼:“不适合。他本来就够像猫了,再戴发箍就太刻意了。”
我和 cyh 同时愣住。scj 却已经转身走了,留下一句:“刚才那道随机化题,我想到了一种更优的种子生成方式。”
“他绝对知道了。”cyh 小声说。
“绝对。”
省选前最后一周,我们进入了冲刺模式。每天从早上七点泡到晚上十点,除了吃饭和必要的休息,全部时间都在刷题、讨论、对拍。
我的状态也在稳步回升。猫科夜行性的特质反而成了优势——当 scj 和 cyh 在晚上九点开始犯困时,我依然精力充沛,耳朵竖得笔直,眼睛在屏幕的光线下闪着微光。
“这不公平,”cyh 打着哈欠说,“你晚上怎么这么精神?”
“天赋异禀。”我面不改色。
“你那个‘天赋’确实异禀。”cyh 意有所指地看了眼我的尾巴——它正愉悦地轻轻摆动。
scj 在对面敲完最后一行代码:“提交试试。”
我运行对拍程序,所有测试点全绿(AC)。“过了。”
“好,”scj 合上电脑,“今天就到这里。明天休息一天,后天省选。”
走出机房时已是深夜,校园里空无一人。我们三个走在路灯下,影子拉得很长很长。
“说真的,”cyh 忽然开口,“如果后天我们三个都进省队了,怎么庆祝?”
“还没比呢,不要立 flag。”我说。
“悲观主义,”cyh 摇头,“scj 你怎么看?”
scj 想了想:“如果都进了,我请客吃火锅。”
“一言为定!”cyh 伸手,“来,击掌。”
三只手叠在一起。我的爪子碰到他们的手心时,感觉到了温热和力量。
“省选见。”scj 说。
“省选见。”cyh 说。
“省选见。”我说。
比赛当天,我戴着 cyh 特制的降噪耳机走进考场。耳朵被妥帖地包裹在柔软的隔音材料中,尾随在身后的尾巴被宽松的外套遮掩。我找到自己的座位,深吸一口气。
监考老师分发试卷。我的耳朵在耳机里捕捉到纸张摩擦的细微声响,比周围的选手敏锐得多——但这次,额外的信息没有造成干扰,反而让我提前几秒知道了题目布局。
三、二、一——开始!
第一题是数据结构题,维护一个支持区间翻转、区间求和、区间赋值的序列。这几乎是集训时我们练过的那道题的翻版。我的爪子落在键盘上,代码流畅地输出。
scj 坐在我斜前方,键盘声节奏稳定;cyh 在右后方,偶尔会发出轻微的哼声(这是他进入状态的标志)。
第二题是图论,求有向图的最小环。我的猫眼在扫描题面时发挥了意外优势——对细节的捕捉能力让所有限定条件一目了然。我很快识别出这是 Johnson 算法的变体,时间复杂度 O(nm log n),在给定数据范围下可行。
第三题……我的耳朵忽然捕捉到一声异响。是某个选手不小心碰倒了水杯,玻璃碎裂的声音。周围有人低声惊呼,但我的耳机很好地隔绝了大部分噪音。我专注于自己的屏幕,爪子没有一丝停顿。
最后一小时,三道题都已经有了初步实现。我开始逐行检查,对拍测试。代码在评测系统上跑过,所有样例全部通过。
交卷的那一刻,我的尾巴在衣服下面激动地抖了一下——还好没有人注意到。
三天后,成绩公布。
我盯着屏幕上的名单,自己的名字赫然出现在省队名单中。scj 和 cyh 的名字也在——我们三个全部入选。
手机疯狂震动。cyh 发了三个感叹号,接着是一连串猫猫表情包。scj 只发了一句:“火锅,明天晚上,老地方。”
我靠在椅背上,猫耳愉悦地舒展,尾巴轻轻摇晃。窗外阳光正好,照在键盘上反射出细碎的光。
第二天晚上,火锅店里热气蒸腾。我们三个围坐在桌边,毛肚、黄喉、鸭肠摆了满满一桌。
“敬省队!”cyh 举起酸梅汤。
“敬省队。”scj 和我碰杯。
吃到一半,cyh 忽然凑过来:“你现在感觉怎么样?我是说……这个形态。”
我想了想:“习惯了。耳朵和尾巴现在就像额外的器官,用起来还挺顺手的。”
“那你以后比赛怎么办?线下赛的话,这个耳朵和尾巴……”
“我已经申请了特殊座位,”我说,“理由是听觉过敏。加上你的耳机,应该没问题。”
scj 涮了一片毛肚:“其实还有一个方案。”
“什么?”
“教练知道你的情况。”scj 平静地说,“我跟他谈过,他说只要不影响比赛成绩,他可以帮你协调所有事。”
我愣住了。尾巴因为震惊而僵直:“你什么时候告诉教练的?”
“上周。你适应得不错,但有些事不是单靠个人就能解决的。”scj 放下筷子,“教练的原话是:‘只要他能拿金牌,就算他长翅膀我也给他安排专机。’”
cyh 大笑起来:“这很教练。”
我低下头,感觉眼眶有些发热。但这次我没有藏起尾巴——它愉悦地摇动着,扫过 cyh 的手臂。
“喂,你的尾巴又蹭到我了。”cyh 说。
“忍一下。”我说。
“好吧,”cyh 伸手,轻轻摸了摸我的头顶——那对猫耳敏感地抖了一下,“忍就忍吧。”
火锅的雾气蒸腾上升,模糊了三个人的脸庞。窗外夜色渐浓,城市的灯光在远处闪烁。我夹起一片涮好的牛肉,耳朵愉悦地微微转动——捕捉到了队友压低声音的交谈,捕捉到了锅底咕嘟冒泡的声响,也捕捉到了属于这个瞬间的所有温暖细节。
省队集训在即,新的挑战还在前方。但此刻,有键盘、有代码、有这群队友——变成猫娘这件事,好像也没有那么糟糕了。
至少,我的夜视能力确实对熬夜刷题很有帮助。
续写
省队集训的场地设在省城郊区一栋独立的小楼里,四周被梧桐树包围,安静得能听见落叶的声音。这对我的猫耳来说简直是天堂——没有汽车喇叭,没有施工噪音,只有风吹树叶的沙沙声和偶尔的鸟鸣。
集训第一周,我们三个被分到了同一间宿舍。scj 和 cyh 对此毫无异议,而我则在思考一个重要问题:怎么在睡觉时不暴露尾巴和耳朵。
第一晚,我等到室友们都睡着了,才悄悄把尾巴从束缚中解放出来。它欢快地舒展,在床上扫了两圈。我侧躺着,尽量让尾巴顺着身体的方向延伸,避免压到。
凌晨三点,我被一阵轻微的响动惊醒。猫耳在黑暗中精准定位——声音来自 cyh 的床铺方向。他翻了个身,被子滑落一角。我正想继续睡,却听见他含混地嘟囔了一句:“lry……别舔爪子……”
我僵住了。什么舔爪子?我什么时候舔过爪子?不对,我确实会在紧张时无意识舔手背,但这个习惯被猫化身体放大后,变成了类似猫科动物清洁行为的动作。cyh 这家伙,连这种细节都注意到了?
第二天早餐时,我特意观察 cyh。他神色如常,啃着包子,面前摊着一本《算法导论》。但当我坐到他旁边时,他嘴角几不可见地弯了一下。
“笑什么?”我警惕地问。
“没笑,”他喝了口豆浆,“就是想起昨晚做了个梦,梦见你变成猫了,坐在键盘上睡觉。”
“你梦得挺准。”scj 从后面走过来,端着一碗粥,“lry 昨晚确实睡得很晚,我三点起来上厕所看到他还没睡。”
“我在想一道题。”我面不改色地撒谎。
“什么题?”
“关于……如何在一个有向无环图上找最长路径的近似解。”
scj 认真思考了两秒:“NP 难问题,你白想了。除非你找到了 P=NP 的证明,那我们可以一起发论文。”
集训的内容比想象中更残酷。每天上午是专题讲解,下午是限时模拟,晚上是复盘和自由讨论。教练是个四十多岁的中年男人,外号“老 K”,据说是退役的 IOI 金牌选手,眼睛毒辣得像评测机。
第三天下午的模拟赛,我遇到了一道交互题。题目要求写一个程序,与评测系统进行多轮问答来推测一个隐藏排列。这种题型我平时练得不多,思路卡壳了快二十分钟。
我的尾巴开始焦虑地摆动,猫耳也微微后压。就在这时,我忽然捕捉到一个声音——隔壁机位的选手正在喃喃自语:“如果每次问‘第 i 个位置是否大于第 j 个位置’……那是 O(n^2) 的询问次数,不行……”
这个思路提醒了我。二分搜索!利用排列的性质,每次询问可以排除一半的可能性,复杂度是 O(n log n)。我飞快地敲起代码,尾巴也慢慢平静下来。
交卷后复盘,scj 问我:“你第三题思路转得挺快,怎么想到的?”
“旁边有人提醒了我一句。”
scj 看了眼隔壁空着的机位:“你说老 K?他确实路过你那里了。”
“是吗?我没注意。”我含糊过去。实际上,那个说话的人坐在我左后方三米处,声音很低,但我的猫耳精准捕捉到了每一个字。这是个意外收获——在现场比赛时,我或许能通过听力优势获取更多赛场信息。
但我很快打消了这个念头。这是作弊的边缘,我不能用这种方式赢。
晚上自由讨论时,教练老 K 忽然走到我身边,拍了拍我的肩:“lry,你跟我来一下办公室。”
我的心跳陡然加速。尾巴在裤管里绷紧。scj 和 cyh 对视一眼,后者朝我微微点头,示意没事。
办公室里,老 K 关上门,示意我坐下。他给自己倒了杯茶,然后开门见山:“scj 跟我提过你的情况。”
我张了张嘴,不知道该说什么。
“别紧张,”老 K 摆摆手,“我见过更奇怪的选手。去年有个孩子,紧张就会打嗝,一打嗝就打一整场;前年有个选手必须戴墨镜才能集中注意力。你这算什么,听觉敏感而已。”
“……您不觉得奇怪吗?”
“奇怪?”老 K 喝了口茶,“我当教练十五年,什么奇怪的事没见过。你现在的水平,三个省队名额里有你一个,这就是硬道理。再说了——”他指了指我的头顶,“你那对耳朵收得挺好,一般人注意不到。”
我下意识摸了摸头顶。发胶和发箍的双重固定下,猫耳服服帖帖地压着。
“不过有件事要提前告诉你,”老 K 放下茶杯,“国赛在十月,到时候全国的高手都会来。赛场环境更复杂,观众席、媒体、各种噪音源。你得提前做好准备。”
“我在练习用降噪耳机。”
“那是硬件层面的,”老 K 摇摇头,“你得适应的是心理层面的干扰。国赛的压力、对手的表现、场外的突发状况——这些不是耳机能挡住的。你要学会把注意力锁定在屏幕上,其他一切自动屏蔽。”
我从办公室出来时,cyh 正靠在走廊墙上等我:“怎么样?”
“没事,教练知道了,他说没问题。”
cyh 松了口气:“那就好。”
“你之前说教练更看重成绩,”我说,“你是对的。”
“我当然是对的。”cyh 笑了,伸手想拍我的头,但手在靠近猫耳的位置停住了,“呃……拍了会不会有反应?”
“会。”
“什么反应?”
“我会用爪子挠你。”
“那算了。”cyh 收回手,但眼睛弯弯的,“走吧,scj 在机房改一道题的常数,说你能帮忙看看。”
集训中期,我们进行了一次队内对抗赛。三人各自独立完成一套题目,然后互相讲评。我的成绩排在第一,scj 第二,cyh 第三。
讲评时,scj 指着我的第二题代码:“你这个记忆化搜索的剪枝条件写得太紧了,虽然能过数据,但逻辑上有漏洞。如果输入是极端情况,可能会漏解。”
我看了一眼,确实如此。“你说得对,我改一下。”
cyh 凑过来看我的屏幕:“不过你的思路真快,这道题我想了四十分钟才动笔。”
“习惯了,”我说,“有些模式见得多了,一眼就能认出来。”
scj 沉默了一会儿:“你最近状态确实比以前好。省选之前你还经常卡题,现在基本一路畅通。”
我愣了一下。他说得对,自从变成猫娘后,我的思维似乎变得更敏捷了。虽然打字速度和身体协调性受过一段时间影响,但逻辑链路的构建、模式识别的速度都有明显提升。是因为猫科的感官让大脑接收更多信息,从而激发了潜能?还是重生本身就附带了某种认知增强?
我不知道答案,也不打算深究。反正结果是好的。
集训第二周,发生了一件让我至今想起都会炸毛的事。
那天下午是自由练习时间,我趴在桌上打盹——猫科生物钟让我在下午三点到五点之间格外嗜睡。cyh 和 scj 在另一侧讨论一道几何题的凸包优化。
半梦半醒之间,我感觉有人在摸我的头。手指穿过发丝,轻轻碰触到耳根的位置。我瞬间惊醒,猫耳“唰”地竖起来,尾巴炸成一个毛球。
面前是 cyh,他的手还悬在半空,表情尴尬:“呃……你头发上有片东西……”
“什么东西?”
“……一片……想象中的树叶?”
我咬牙切齿:“cyh。”
“我错了!”
scj 从屏幕后面探出头:“你们在干嘛?”
“cyh 在找死。”我说。
最终这件事以 cyh 承包一周的夜宵告终。但从此以后,我再也不敢在公共场合露出猫耳了——鬼知道 cyh 那双看似无辜的手会在什么时候伸过来。
国赛前两周,我们在机房进行最后一次全真模拟。老 K 从外地请来了三个去年的国赛选手,跟我们打对抗赛。
那三个人的实力明显高出一截,思路更刁钻,代码更精练。五小时的模拟赛下来,我勉强拿了 210 分,scj 190 分,cyh 170 分。对面三人平均分在 240 以上。
复盘时,老 K 没有批评我们,只是说:“差距就在这里。你们还有两周,能补多少是多少。”
当晚,我们三个没回宿舍,就在机房里泡着。我把那道没做出来的第三题反复推演,scj 在优化第二题的常数,cyh 则重写了第一题的实现方案。
凌晨两点,scj 忽然开口:“我明天想试一个新策略。比赛时先做第三题,再做前两题。”
“为什么?”cyh 打着哈欠问。
“第三题分值最高,而且通常思路最前沿。如果先做前两题,大脑会进入‘舒适区’,看到第三题容易产生畏难情绪。反过来,先用最好的状态啃硬骨头,剩下的就顺理成章了。”
我想了想:“有道理。但风险也高——如果第三题卡死,时间就浪费了。”
“所以只试一次,”scj 说,“明天的模拟赛,我来验证这个策略。”
第二天,scj 果然按新策略执行。前一个小时,他对着第三题一动不动,屏幕上的代码删了又写、写了又删。我和 cyh 在旁边各自做着第一二题,心都悬着。
两个小时后,scj 长长地呼出一口气:“过了。”
我凑过去看,他的第三题代码简洁得像首诗,核心逻辑只有四十行。“你怎么想到的?”
“这道题的本质是二分图匹配的变体,”scj 说,“但官方解法用的是网络流。我用了贪心加匈牙利,常数更小。”
那天模拟赛,scj 拿了 260 分,破了我们队的记录。晚上他请客吃麻辣烫,我们围坐在小店里,热气腾腾的碗映着三张年轻的脸。
“国赛,”cyh 举着酸梅汤,“我们三个都要拿牌。”
“保底银牌。”我说。
“冲金。”scj 说。
碗碰在一起,发出清脆的声响。
国赛那天,我提前一小时到了赛场。降噪耳机调整到最舒适的位置,猫耳被妥帖地包裹。尾巴用一条特制的弹性绷带固定在腰间,外面穿着宽松的外套,完全看不出异样。
安检时,工作人员盯着我的耳机看了两秒:“这是什么?”
“医生建议的降噪设备,我有听觉过敏,相关证明已经提交了。”
工作人员核对了名单,点点头放行。
我找到自己的座位,是角落里的位置,三面有隔板,把赛场的大部分噪音隔绝在外。老 K 和教练组在二楼的观察区,我看到 scj 和 cyh 已经在各自的位置上坐定。
九点整,比赛开始。
第一题是数论,求模意义下的高次剩余。我看到题目的瞬间,猫耳在耳机里微微转动——大脑里浮现出一套完整的解法路径。爪子在键盘上飞舞,代码行云流水般出现。
第二题是数据结构,要求维护一个多维偏序的动态查询。我停下来想了想,决定用 CDQ 分治加树状数组来实现。实现过程有些复杂,但我控制住了节奏。
到第三题时,还剩两个小时。我抬头看了眼屏幕右上角的时间,深吸一口气,开始读题。
这是一道概率题,给出一组随机事件的依赖关系,求最终状态的期望。乍看之下毫无头绪,但我注意到题目附带了一个特殊的约束条件——事件之间的依赖图是树形结构。
树形结构……树形 DP……容斥……我闭上眼睛,猫耳微微后压,把所有注意力集中在脑内的推演上。
思路逐渐清晰。我睁开眼睛,开始打字。
还剩四十分钟时,第三题的代码完成。对拍测试,所有样例通过。我趁热打铁检查了前两题的代码,修正了一处边界条件。
交卷前最后一分钟,我忽然想到了一个更好的写法来优化第二题的常数。但时间不够了,我只好提交了当前版本。
铃声响起,比赛结束。
我靠在椅背上,尾巴在绷带里轻轻颤抖——是紧张过后的松弛。猫耳捕捉到赛场里此起彼伏的叹息声、敲键盘的余响、选手们低语交谈的嗡嗡声。耳机过滤了大部分,但残留的信息仍然丰富。
走出赛场时,scj 和 cyh 已经在门口等着了。cyh 看起来还算轻松,scj 的表情则一如既往地平静——你永远看不出来他考得怎么样。
“感觉如何?”cyh 问我。
“还行。第三题做了,但第二题的常数可能有点大。”
“我也是,”cyh 说,“第一题我卡了半小时,差点心态崩了。”
scj 说:“第二题我用了一个新的数据结构,不知道评测会不会认。”
我们三个沉默了一会儿,然后同时笑了。
“等成绩吧,”我说,“不管结果如何,先吃饭。”
成绩公布是在三天后的闭幕式上。大屏幕上滚动着选手的名字和分数,主持人从后往前宣读。
铜牌名单念完了,没有我们。银牌名单念完了,也没有。
我的心往下沉。scj 和 cyh 站在我旁边,面色平静,但我看到 cyh 的手在微微握紧。
“接下来是金牌名单。”主持人的声音在礼堂里回荡。
第一个名字不是我们。第二个也不是。第三个……
“lry!”
我的猫耳在耳机里猛地竖起,尾巴差点从绷带里挣脱出来。
“scj!”
“cyh!”
我们三个全在金牌名单里。
礼堂里响起掌声,我看到二楼观察区里,老 K 站起来,朝我们竖了个大拇指。
站在领奖台上时,聚光灯打在身上,台下的面孔模糊成一片。我感觉到 cyh 在左边轻轻碰了碰我的手,scj 在右边笔直地站着,胸口挂着金色的奖牌。
领奖结束后,我们三个从侧门溜出来透气。夜风习习,吹得我猫耳发痒。我取下耳机,让耳朵自由地竖起来,感受风吹过毛发的触感。
“金牌。”cyh 还沉浸在情绪里,“真的是金牌。”
“你第一题不是心态崩了吗?”我说。
“崩完又重建了。”cyh 笑了,“我后来发现那个题有特殊性质,用费马小定理能直接过。”
scj 靠着墙,看着天空:“我们做到了。”
“是啊,”我把奖牌在手里掂了掂,“做到了。”
回到宿舍已经很晚了。cyh 累得倒头就睡,scj 还在灯下翻看国赛的题解。我趴在床上,尾巴终于从绷带里解放出来,慵懒地铺在床单上。
手机亮了,是 cyh 发来的消息——他已经睡着了,怎么发的消息?
我点开一看,是一张照片。照片里是我趴在桌上打盹的样子,灰色猫耳从发间支棱出来,尾巴垂在椅子边缘轻轻摇晃。光线很暗,应该是集训时某天晚上偷拍的。
下面跟着一行字:“恭喜猫猫拿金牌 ❤️”
我的耳朵“唰”地红了。我把手机扣在枕头上,尾巴却不受控制地蜷起来,像个害羞的逗号。
scj 在对面抬起头:“你脸很红。”
“被窝太热。”
scj 看了看空调温度:“22 度,哪热了?”
“我……体质特殊。”
scj 没再追问,继续看题解。我缩进被子里,尾巴卷住自己的腰,像一条毛茸茸的围巾。耳机放在枕边,奖牌挂在床头,在月光下泛着柔和的金色光芒。
窗外有夜鸟掠过,猫耳捕捉到羽翼破风的声音。我闭上眼睛,感觉到心脏沉稳有力地跳动着。
重生成猫娘这件事,到现在已经过去了三个多月。我仍然会在照镜子时愣住,仍然会在意外触碰耳朵时炸毛,仍然会下意识用舌头舔手背上的毛。
但我也习惯了在凌晨三点精神抖擞地刷题,习惯了用超强听力判断队友的键盘状态,习惯了尾巴在开心时摇动的节奏。
最重要的是,我有了 scj 和 cyh。
算法世界里有一句话:没有最优解,只有更优解。人生大概也是如此——重生后的我,以一种荒谬的方式,找到了属于自己的更优解。
国赛结束后的那个周末,我们仨坐在集训楼的天台上,一人一瓶汽水,看着远处的城市轮廓在暮色中渐渐亮起灯火。
“下个目标是什么?”cyh 问。
“冬令营。”scj 说。
“然后呢?”
“国家队选拔。”
“再然后?”
“IOI。”
我喝了口汽水,耳朵在晚风中舒服地舒展。“那就一步步来,先把冬令营的名额拿到。”
cyh 伸手,这次我没有躲。他的手落在我头顶,轻轻揉了揉那对猫耳之间的位置——没有碰到敏感的耳朵本身,恰好落在发旋处,力度温柔得不像他的风格。
“干嘛?”我问。
“奖励我们金牌猫猫。”
scj 在旁边喝汽水,没说话,但嘴角微微弯着。
夜色渐浓,远处的灯火连成一片温暖的光河。我的尾巴在背后轻轻摇晃,扫过天台地面,带着一种属于猫科动物的慵懒满足。
键盘、代码、算法、队友——这个世界不算完美,但足够好了。