长按音符并不是只在开头按一下就完成。把要求保持的时间段与实际按住的时间段叠加,可以看到漏掉的区间,而不仅是一个总分。重叠输入也不能被重复计时。
这份练习把数据、规则和中间状态一起列出。可以先自行推演,再与过程记录逐项比较;如果结果不同,先找到第一处分歧,确认时间单位、端点归属和运算顺序。案例是一套限定模型,不把其他作品的不同实现认定为错误。
规则与输入
这里不模拟任何商业作品评分,只计算目标左闭右开区间内,被至少一个按住区间覆盖的整数时间单位。目标外的按住时间不计,重叠部分只计一次,不设置宽容窗口。
目标长按[12,38),长度26 [[12, 20], [33, 39], [23, 31], [32, 37], [13, 17], [24, 26], [38, 45]]
逐项推演
输入0按住[12,20),落在目标内的单位起点[12, 13, 14, 15, 16, 17, 18, 19];此前未覆盖的新单位[12, 13, 14, 15, 16, 17, 18, 19],累计覆盖8。
输入1按住[33,39),落在目标内的单位起点[33, 34, 35, 36, 37];此前未覆盖的新单位[33, 34, 35, 36, 37],累计覆盖13。
输入2按住[23,31),落在目标内的单位起点[23, 24, 25, 26, 27, 28, 29, 30];此前未覆盖的新单位[23, 24, 25, 26, 27, 28, 29, 30],累计覆盖21。
输入3按住[32,37),落在目标内的单位起点[32, 33, 34, 35, 36];此前未覆盖的新单位[32],累计覆盖22。
输入4按住[13,17),落在目标内的单位起点[13, 14, 15, 16];此前未覆盖的新单位[],累计覆盖22。
输入5按住[24,26),落在目标内的单位起点[24, 25];此前未覆盖的新单位[],累计覆盖22。
输入6按住[38,45),落在目标内的单位起点[];此前未覆盖的新单位[],累计覆盖22。
覆盖22拍,缺失4拍,连续缺口[[20, 23], [31, 32]];两者之和为26。
复核与使用边界
把目标逐单位展开,标记每个单位是否被覆盖,再合并连续缺口。覆盖长度加缺口长度必须等于目标长度,多个输入的长度总和不能直接替代并集长度。
覆盖总长度一样的两次输入,缺口位置和数量可能完全不同。若规则对中途松开有单独惩罚,不能仅用总覆盖长度判断得分;本例把缺口列出,是为了让后续评分规则有清楚的输入。
复盘时建议保留输入表和中间状态,而不仅保存最终答案。改动一个条件后重新推演,再检查起点、终点、重复值和临界输入;这样能把规则本身、计算实现和显示结果分别核对,避免把一次偶然相同当成验证完成。
