下一章 上一章 目录 设置
79、模拟第一轮 第三题加载 ...
-
第三题加载出来时,公共澄清区还是空的。
题面给了两组样例。第一组里,最新状态拥有完整确认链;第二组少了一条确认记录,题面却没有说明缺失时该沿用旧值,还是把当前输入判为无效。右下角的倒计时从六十二分钟跳到六十一分五十九秒,数字每变一次,封闭训练室顶上的换气扇就像跟着顿一下。
岑序先在“最新有效”下面划了一道线。
按照本轮规定,队员不能跨位交谈,只能向公共区提交疑义。卓澄坐在斜前方另一组,已经在自己的草稿上写下“申请澄清”,却没有回头确认岑序是否也看见了同一处。第三题的澄清列表很快多出三条,最早一条正是询问确认记录缺失,状态停在“已受理”。
没有答案。
本轮座位是开赛前随机抽的。岑序在B组三号机,卓澄在A组最靠窗的位置,中间隔着一排旁训席。廖问坐在岑序前方,只能看到白板上的题目状态,看不见任何人的草稿。方祁负责第四题的设备接口,耳机挂在颈后,赛前已经被穆一衡提醒过两次,不得因为别组先过题就临时换题。
每张桌面都压着一张薄薄的纸质规则:允许提交公共澄清,允许标记争议前提,禁止跨位提醒,禁止用历史事故补充题目未写条件。最后一条是昨天才加进去的,墨迹比其他几行更深。岑序抽到规则纸时看过一遍,没有在上面签“理解”,只签了“收到”。
模拟开始后的前二十分钟,房间里几乎没有人说话。只有管理员偶尔报一次网络状态,穆一衡从过道经过时也不看个人屏幕。他可以记录设备故障,不能判断题目,更不能在学生明显走偏时靠停步或目光给暗示。
第一题通过以后,岑序把草稿翻到背面,记下实际用时和一个未压满的边界。第二题中途,隔壁机器的风扇突然提速,像有一张硬纸卡在里面。廖问抬手示意设备噪声,管理员给他换了降噪耳塞,没有暂停整场。岑序也没有因此多出时间。
第三题出现时,所有人已经各自承担过一点无法补回的小误差:有人被设备声打断,有人第一题多写了一层循环,有人为了核输入格式少看了下一题。题面缺失不是唯一压力,只是最容易被看见的一处。
第一题是常规状态转换,岑序十七分钟通过。第二题要求在有限内存里筛选异常序列,他比训练平均慢了四分钟,却把自己原先准备增加的两层保险删掉,只留下题目明确要求的边界。第二题亮绿时,另一队刚好先过了一道高分题,白板上的总分从并列第一变成第二。
白板只显示队伍总分,不显示个人排名。灰色标签事故留下的八分钟延时已经被写进顶部说明,不需要任何人抢回来。可当差距从三分变成九分时,方祁在后排还是把键盘敲得更快,空格键撞出一声短促的脆响。
岑序没有看他。
第三题的主逻辑并不复杂。确认链完整时,读取最新状态;确认缺失时,根据题目规则决定是否回退。真正的问题只有一句没写清。
他本可以先完成不依赖争议条件的输入读取、状态压缩和输出框架,把缺口留成一个接口。草稿上甚至已经分好了三段。可第二组样例里那条缺失记录太像旧W17事故:系统拿不到确认,最后却把异常写到提交者身上。
岑序盯着样例输出,没有继续核题目后面的限制说明。
他把“确认缺失”单独拉出一条保护分支:暂停当前判定,保留上一版本,同时把本条记录送入待核队列。为了避免旧值被误用,他又加了一层来源标记;为了防止待核记录进入公开结果,再加一层输出遮断。
这套处理放在现实系统里并非毫无道理。
但这是一道限时题。
题目只要求计算状态,不要求替系统建立一整套申诉流程。
岑序第一次提交,公开样例全部通过。
白板右上角的队伍状态多了一格绿色。后排有人轻轻吸了口气。队内纸面协作规则允许所有人看见每道题是否通过,不允许复制代码,也不允许当场询问做法。廖问原本正在尝试一种更简单的回退逻辑,看见岑序第三题率先亮绿,把自己的草稿翻回前一页,在“缺确认”旁边补了一个待核标记。
隐藏测试只过了六成。
绿色状态退回灰色,队伍总分没有增加。第三名在同一分钟过题,他们从第二滑到第三。
岑序重新检查代码。
如果只是边界写错,失败比例通常不会这样整齐。他应该退回前提,可他先看见的是保护分支里两个尚未覆盖的例外:上一版本本身没有确认;待核队列已经存在同编号记录。第二次提交前,他为这两种情况分别加了处理。
五成。
第三次,他把“保留上一版本”改成“双轨输出”,希望既不丢当前记录,也不让它直接参与异常判定。原本不到四十行的主逻辑被挤到三层条件里面,变量名从current、last变成current_pending、last_valid、last_pending。为了区分它们,他又写了一张映射表贴在屏幕边。
六成。
倒计时跳到二十九分钟。
岑序没有立即看自己的排名,却能从白板总分变化判断后果。另一队第三题尚未通过,却在第四题拿到一半分数;他们这边的进度仍停在第二题。方祁负责的接口题需要在第三题状态结构上读取一段结果,他原计划等公共模块稳定以后再接。看到第三题公开样例亮绿,他提前把接口字段按岑序的命名写进自己的草稿,隐藏测试失败后又不得不全部改回。
“字段只是草稿。”赛前规则允许方祁自言自语,却不允许他问岑序。他把这句话压得很轻,更像说给自己听。
桑泊宁不参与本轮编程,她坐在后方记录区,负责标记每次公共规则变化对展示材料的影响。她看见同一题连续出现三次提交,记录本上原本写了“反复试错”,停笔后又划掉,改成“同一前提未重新核验”。前一个词像性格判断,后一个才是她真正看见的动作。
穆一衡也看见了。他站在教师端,能打开每次提交的通过比例,却按规定不能查看代码,更不能因为知道岑序过去经历过什么就替他叫停。教练席上有一张暂停按钮说明,只适用于身体不适、设备危险和明显违规,不适用于“老师判断这条思路可能不对”。
岑序第三次提交前,穆一衡的手确实碰到过按钮边缘,最后仍然收回。若教师可以在熟悉的学生走错时替他暂停,模拟测出的就不再是个人判断,而是老师是否足够了解谁。
倒计时二十九分钟时,方祁的第四题第一次运行失败。错误提示是字段类型不一致。他把刚才按公开样例建立的接口整段注释掉,改成独立输入,损失了六分多钟。廖问则把原先删除的半页草稿从废纸区抽回来,纸已经被揉出折痕,只能重新抄一遍。
公开样例通过只是一盏很小的绿灯。它没有命令任何人跟随,却在时间有限时变成了最像答案的东西。岑序越晚承认前提未证,别人越难把已经投入的时间完整拿回来。
广播提醒,第三题澄清仍在处理中。
卓澄完成第二题,抬眼时正好看见岑序第三次提交。屏幕上的红条不显示错误位置,他只能从三次提交间隔判断,岑序在围绕同一个未确认前提继续加码。
他不能提醒。
这正是本轮要测的东西:搭档不会永远坐在旁边;一个人过去做对过的事,也不能自动成为另一个人的现行规则。
卓澄把自己的第三题拆成四个模块,先写与确认状态无关的部分。他在缺口处留了一个空函数,没有猜默认值。这样做不会立刻得分,却至少保证回复到来以后只改一个入口。
廖问第一次提交,同样只有六成。
他盯着结果看了十几秒,没有继续补分支,而是把自己的方案标成“待澄清”,转去检查已经通过的第二题。检查过程中,他发现一处内存上界虽然不影响当前样例,却可能在极限数据下出错。修完再回头时,公共区仍没有答案。
“已受理”三个字没有变。
岑序看见第二个六成,手指悬在回车键上。
他第一次清楚意识到,自己的公开样例通过已经变成了别人判断的一部分。廖问没有看过他的代码,却因为看见结果,放弃了原先更接近题目结构的回退方案。
错误方向正在扩散。
岑序把第四次提交窗口关掉,没有提交刚写完的又一层保护。他重新打开题面,从第一句开始读。读到输出限制时,他发现题目只允许三种状态值,没有待核队列,也没有双轨输出的位置。他为了防止现实里发生过的伤害,先给题目增加了一个并不存在的世界。
卓澄收到澄清时,自己的空函数只需要替换三行。他先把“无历史确认值”单独跑了两组自建样例。第一组返回未知,第二组却因为旧变量没有清空,沿用了上一条记录。这个错误与岑序的保护分支无关,是他自己为了节省内存复用了缓存。
他删掉复用逻辑,提交后拿到满分。白板总分因此回到第二,但他没有用自己的通过证明等待一定优于提前处理。若澄清再晚十分钟,他也可能来不及完成;如果题目其余部分更复杂,留空函数也会产生另一种成本。
他在个人说明上写:本次等待策略有效,不作为所有争议题的固定答案。
另一队在澄清前采用了第三种做法。他们把两种解释分别实现,只在最终入口保留切换开关。回复到来后只改一处,因此比卓澄早提交三分钟,却为双方案多占了内存,第四题因此少了一次运行。三支队伍没有谁靠一种方法赢下全部风险。
岑序看见各队结果时,才真正明白自己不是在“谨慎”和“冒险”之间选错了一个词。他的问题是把一种未经确认的现实补救机制直接写成题目规则,又因为公开样例通过,迟了二十多分钟才重新问前提。
他把那张写满映射名的纸从屏幕边取下来,没有揉掉。纸上三种pending变量挤在一起,最外层还画着一个方框。这个方框以后可以证明他当时怎样把问题越包越大,也可以提醒他,复杂并不自动等于负责。
十五分钟后,公告栏终于更新。
缺少确认记录的输入不计入最新有效状态,沿用最近一次已确认值;若不存在历史确认值,输出未知,不进入异常判定。
等待澄清不等于冻结全部流程。
沿用旧值也不等于自动生成待核任务。
岑序的保护分支写错了层级。
他删除三层条件,把待核队列移进注释。主逻辑重新露出来,只剩三十七码。剩余时间十六分钟。
重写到无历史值时,他又停了一次。题面回复已经写明返回未知,可公开样例没有覆盖。过去的习惯让他想再加一个分支,防止未知被后续模块误读。他看了两秒,把那行注释留在旁边,仍按当前规则返回未知。
第四次提交,九成。
最后一组隐藏数据失败。
岑序沿着返回路径往上查,发现不是确认链问题,而是一行最普通的初始化遗漏。时间边界恰好落在零时,数组第一位没有写入。若他前面没有耗费二十多分钟搭保护分支,这处错误只需要一次完整检查。
倒计时还剩四分十二秒。
他修改初始化,准备第五次提交,系统却先弹出全队统一锁定提醒:最后三分钟只允许保存,不允许新增提交。这个限制写在赛前说明里,方祁还嫌它麻烦,岑序当时没有反对,也没有真正记住。
第五次提交按钮变灰。
铃声响起时,第三题停在九成。队伍总分回到第二,与第一差七分。
这个分数并不难看。真正的损失也不是那七分本身。岑序错失的最后一成来自最简单的实现疏漏,廖问为了跟随公开样例多用了十分钟,方祁因此把第四题的设备校验压到最后,没有完成第二轮检查。三个人的时间被同一个错误方向切走,谁都不能说只是岑序个人少拿了一点分。
终端自动锁屏。
成绩锁定后,管理员没有立刻允许他们拔掉终端。每台机器先生成一张本地操作摘要,只保留提交时间、题号和通过比例,不保存代码。方祁那台摘要里多出一行“接口字段重建”,廖问的是“撤回草稿后恢复”,岑序则有三次连续失败和一次澄清后重写。
“要不要把它们合成一张团队记录?”管理员问。
邬白榆先摇头:“先分别领。合并要等每个人确认自己的那一行。”
五张纸从打印机里依次出来,纸面还带着热度。岑序拿到自己的,没有去看廖问那张;廖问也没有把“受岑序影响”写成现成结论。他只圈出自己看到公开样例绿灯的时间,再把真正改变草稿的动作留到个人说明里。
方祁的纸最乱。他先写“被第三题拖累”,写完觉得这句话把自己放成了完全被动的一方,又改成“在第三题前提未确认时提前依赖共享字段”。他的接口设计本来可以保持独立,是他为了赶时间主动接入。
桑泊宁把所有纸收进不同透明页,没有按题号叠在一起。她说,若现在先合并,最容易发生的事是把同一时间段自动写成同一原因。
去食堂的路上,方祁仍忍不住算那七分。他算第一队最后一题的分值,算澄清若早五分钟回复,他们是否可能反超。算到教学楼门口,邬白榆问他:“你算的是可能结果,还是已经发生的责任?”
方祁把手机锁屏:“我只是觉得亏。”
“亏可以写。”
“写了也不加分。”
“本来就不加。”
这句话让他一路没再说话。损失记录不是补偿券,复盘也不会把排名改回去。
训练室里立刻响起椅脚移动声。有人先看排名,有人抱怨澄清太慢。方祁把第三题打印页拍在桌面上:“少一句关键条件,怎么做?这不就是出题端的问题吗?”
“题面有问题。”邬白榆把纸从他手下抽出来,压平卷角,“但题面有问题,不等于每一种猜法都一样合理。”
“那十五分钟总不能算我们头上。”
“澄清延迟单独算。”
“岑序前面那几次呢?”
方祁问出口后,自己先停了一下。他不是想把责任推给岑序,只是不知道两件同时成立的事该怎么放在一张纸上。
穆一衡没有让他们围在终端边争。他先关闭白板成绩,把训练结果导出成只读文件,再要求每个人离开座位,去走廊尽头拿一张独立失分说明。说明不能互相看,七点复盘前交回。
“先吃饭。”他说,“饿着写出来的东西也不能算更诚实。”
食堂只剩最后一轮窗口。方祁端着面坐下,仍在复述题面缺失;邬白榆提醒他先把自己的第四题写完。桑泊宁把小票背面撕成五块,给每个人记一句最短的事实,不许用“因为”“所以”。
岑序拿到的那一块空着。
他吃了半碗饭,才写:澄清前连续三次扩大同一未确认前提。
写完后,他又想加一句“旧事故使我倾向保护性解释”。笔尖停在纸面,没有落下。那句话也许是真的,却没有可核的边界。它很容易从原因变成免责,再从免责变成别人替他解释行为的固定标签。
他把纸翻过去,只在背面写了四个字:判断过早。
廖问的失分说明比他长。第一行承认自己把他人的公开样例通过误当成前提可靠,第二行写明及时停止不等于没有成本,第三行记录多用十分钟造成后续检查压缩。
方祁最后才交。他把“题目坑”划掉,改成“题面缺失与澄清延迟”;下面另起一行,写自己的第四题检查被压缩,不判断由谁单独负责。
七点零五,第三题投到白板中央。
穆一衡把题面缺失、澄清发布时间、四次提交时间和全队路径变化分成四层。没有代码,也没有姓名,但所有人都知道那条连续六成来自哪里。
“先说出题端。”他说。
方祁举手:“缺少确认记录的处理规则没写,澄清十五分钟才回。”
“登记。”
邬白榆写在左栏,没有添“导致失分”。
“参赛端呢?”
教室里短暂没人开口。
方祁试着说:“因为这题太像以前的——”
“以前的事不能替这次判断作证。”卓澄打断他。
岑序抬起头。
卓澄走到白板前,用激光笔先标题面缺口,再标三次提交。他没有说岑序是受旧事故影响,也没有说保护别人本身没有错。
“题面边界不完整,应当申诉;澄清延迟也要单独记录。”他说,“但回复到来前,岑序把一种历史经验扩成了当前规则,连续三次提交都建立在同一个未确认前提上。公开样例通过以后,廖问跟进了同一路径。我们没有复制代码,判断仍然发生了扩散。”
方祁张了张嘴,没再替谁找理由。
穆一衡没有把这句话立刻写成全组结论。他先问廖问是否同意公开“路径扩散”,又问方祁是否愿意把接口重建列入团队成本。两个人分别点头,桑泊宁才把三张个人说明中重合的时间段并到公共页。
公共页只列出三个事实:公开样例绿灯影响后续判断;两名队员因此改过路径;澄清后团队仍需额外重建。个人为什么跟随、当时是否信任岑序,则留在各自说明里。
邬白榆把“主要风险”改成“本轮主要判断风险”,限定只适用于这一场。她不允许一次模拟把任何人永久写成容易冒进,也不允许大家因为害怕标签,就把已经发生的扩散删掉。
最后一排的高一旁训生问,题面确实有错,为什么还要把队内判断写得这么细。穆一衡只把记号笔放回讲台槽。
卓澄看向岑序。那一眼停得很短,他仍先拿起激光笔,红点落在三次提交之间。
岑序把失分说明往自己这边收了半寸。纸背的“判断过早”被汗洇开。他不反对结论,却没有把主讲位置让出去。
卓澄说完“判断仍然发生了扩散”,教室里没人接话。廖问面前的折皱草稿、方祁没完成的第二轮检查都还在桌上。
岑序抬眼,视线越过红点落到卓澄脸上。
卓澄没有继续替他补原因,激光笔停在第四次提交。
两个人都站在原位。
“这次的主要判断风险,也来自我们自己。”