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