# 数位合并的最大值与最小值:题解 ## 解法与贡献 首选出题人的线性贪心:根据进位与否选择高位,再选择对应低位。Codex(GPT-6)补充下面的比较证明、边界分析及标准 C++17 实现。数位的字典序比较是通常的位置记数法性质。 下图为样例一,基数为十;两条箭头分别表示产生最大值和最小值的选位。 ![ 算法示例 ](assets/example.svg) ## 比较结果 去掉前导零后,先比较位数,再比较同长度数位串的字典序。原数为正,操作后仍为正:不进位时数位总和不变,进位时保留一个一。 进位保留全部 $n$ 位;不进位最多剩 $n-1$ 位。因此最大值优先进位,最小值优先不进位。以下位置均按原串编号。 固定左位置 $i$ 后,不进位会增大右位置的数字,故求最小时取最靠右的可行 $j$ ;进位会减小右位置数字,故求最大时也取最靠右的可行 $j$ .改变发生得越晚,前面的有利数位就保留得越久。若加数为零而没有实际变化,选择更靠右仍不劣。 ## 最大值 从右向左维护后缀最大值,找到最靠右的、能与右侧某位进位的位置 $i$ . 若 $a_i\ge2$ ,进位后该位变成一,是结果的第一个下降位置。因此在这类操作中,越靠右越好;固定该位后,选最靠右的可行 $j$ . 还需单独比较 $a_i=1$ 的情形。它只能与 $k-1$ 进位,且高位不变,唯一变化是低位从 $k-1$ 变为零。取最左的一和最右的 $k-1$ ,要求前者确实在后者之前。设后者位置为 $q$ .如果 $q>i$ ,这项方案比普通候选更晚下降,应当采用;如果 $q=i$ ,普通候选在该位得到一,而它得到零,普通候选更好;如果 $q2$ 不进位地合并,那么删除第一位后至少再删一个前导零。这比任何保留 $n-1$ 位的操作都小。使用最靠右的可行 $j$ 即可。 排除上述情况后,可行的不进位结果均有 $n-1$ 位。若存在 $$a_i>a_{i+1},\qquad j\ge i+2,\qquad a_i+a_j