4.1 平行志愿投档规则与推演 本节摘要:第 1 章讲过投档规则的定义,本节把它变成推演工具:给志愿表每一行标注"投出条件"与"投不出后果",用逐行模拟检验一张志愿表的结构缺陷。推演结论只有一条主线:行的顺序几乎无代价,行的间距才是一切。 从一道排序题开始 考生位次一万零五十,手里有六所学校:甲(去年位次八千)、乙(一万零六百)、丙(一万零九百)、丁(一万三千)、戊(一万八千)、己(两万二)。两份排法—— 排法一(按"喜欢程度"):丙、乙、甲、戊、丁、己。 排法二(按位次降序):甲、乙、丙、丁、戊、己。 假设今年各校位次不大幅波动,两份排法投档结果几乎必然相同:甲投不出(位次差太远),乙投不出或惊险,丙大概率投出。
本节摘要:第 1 章讲过投档规则的定义,本节把它变成推演工具:给志愿表每一行标注"投出条件"与"投不出后果",用逐行模拟检验一张志愿表的结构缺陷。推演结论只有一条主线:行的顺序几乎无代价,行的间距才是一切。
考生位次一万零五十,手里有六所学校:甲(去年位次八千)、乙(一万零六百)、丙(一万零九百)、丁(一万三千)、戊(一万八千)、己(两万二)。两份排法——
排法一(按"喜欢程度"):丙、乙、甲、戊、丁、己。
排法二(按位次降序):甲、乙、丙、丁、戊、己。
假设今年各校位次不大幅波动,两份排法投档结果几乎必然相同:甲投不出(位次差太远),乙投不出或惊险,丙大概率投出。既然如此,排布的重点就根本不在"把最喜欢的放第一行"——机器会跳过够不着的行,无论它在第几行。真正的变量是间距:乙与丙只差三百位,两行几乎同生共死;丁到戊之间五千位的空档里如果没有任何行,一旦丁失手,就直接滑到戊。排序不是选择题,间距才是。
对志愿表每一行写两个标注:投出条件(今年该校位次落在什么区间时,机器会扫到你这行且仍有余额)与投不出后果(没投出时,损失是什么——答案总是"零",机器继续扫下一行;唯一的例外是整表扫完都没投出,即滑档)。这份标注让志愿表从一张愿望清单变成一台可推演的机器:
这张流程图值得贴在电脑旁,因为家庭讨论志愿时的一切分歧,最终都能还原成图上的一个分支问题:"这一行如果投不出,我们接受它顺延到下一行的结果吗?"
# 志愿表逐行推演:给定今年位次波动情形,输出投档落点 志愿表 = [ # (行, 校名, 去年位次, 今年假设位次) (1, "甲大学", 8000, 7600), (2, "乙大学", 10600, 11200), (3, "丙大学", 10900, 11100), (4, "丁大学", 13000, 12800), (5, "戊大学", 18000, 17500), (6, "己大学", 22000, 21500), ] 考生位次 = 10050 for 行, 校, 去年, 今年 in 志愿表: if 今年 <= 考生位次: print(f"第{行}行 {校}:今年位次{今年} ≤ 我{考生位次} → 投出") break print(f"第{行}行 {校}:今年位次{今年} > 我{考生位次} → 跳过") else: print("全部跳过:本批次滑档") # 输出: # 第1行 甲大学:今年位次7600 > 我10050 → 跳过 # 第2行 乙大学:今年位次11200 > 我10050 → 跳过 # 第3行 丙大学:今年位次11100 > 我10050 → 跳过 # 第4行 丁大学:今年位次12800 > 我10050 → 跳过 # 第5行 戊大学:今年位次17500 > 我10050 → 跳过 # 第6行 己大学:今年位次21500 > 我10050 → 跳过 # 全部跳过:本批次滑档
这份输出暴露了草案的致命缺陷:中段学校集体走了弱年反波动,整表竟然全军覆没。注意问题不在"冲"——第一行甲投不出毫无损失——而在中段三行(乙丙丁)位次黏在一起,且全表只有戊己两个远端支点。修正方向就是把 4.2 节的梯队间距落实。变式:把丁的今年位次改为一万零四百,输出变为第 4 行投出——同一张表,一年的波动就足以让结局反转,这正是推演要多跑几个情景的原因。

结论一,冲的代价是零,所以敢冲;滑档的代价是全批次,所以必须兜。 机器不惩罚够不着的行,只惩罚"没有更低的行"。这句话是整个平行志愿排布的第一性原理。
结论二,同带黏连是头号结构病。 位次差小于几百的两行形同虚设,占一个志愿位却不增加一个独立结局。自检方法:把志愿表按位次排序后看相邻行差值,黏连的行要么换掉,要么拉开。
结论三,推演要跑多情景。 至少跑三套假设:整体走弱(题难年)、整体走强(题易年)、目标校局部波动。任何一套情景下出现"全部跳过",都说明保梯队深度不够。多情景推演在第 5 章会升级成正式的压力测试,这里先建立习惯。
同分考生如何竞争同一行?多数省份按同分排序键分出先后,前一位次占用余额后,后一位次若被同校拒收则顺延扫描下一行——对个体而言,结论是把"压线同行"视为五五开的独立事件,不纳入稳定预期。余额何时刷新?一轮投档内不存在"退档回池再投",征集志愿才是余额重新入场的时刻。这两个边角合起来给出一条实用推论:压线进档的任何一行,都要按"进档后专业层可能全落空"来做预案,即该行的调剂池过堂不能省略。
逐行推演值得开成一次正式的家庭会议,议程四十分钟以内:第一段十分钟,考生或家长把志愿表逐行念一遍,每行念完回答固定两问——这行投出的条件是什么,投不出我们损失什么;第二段十分钟,翻出位次带标注,检查相邻行的位次差,当场把黏连行圈出来;第三段二十分钟处理分歧,规则沿用第 6 章的三步卡:数据层查出处、权重层对照打分、底线层考生优先。会议产出物是修订后的志愿表和一张记录了每行"投出条件"的便签——这张便签在录取查询期还有第二个用途:对照实际投档线逐行复盘哪几行推演命中。
会议纪律与家庭复盘会同源:只对流程不对人。推演会上说出口的"这行有风险",针对的是排布结构而不是排布的人——这句话要先讲在前头,否则家长一句无心的"你怎么选的这种学校"就能让推演会变成最后一次。
下一节把"间距"工程化:给出冲稳保的位次配比、带距参数与完整的排布演算。