如无特殊说明,题目中出现的所有数字均为十进制数字; 进制数字会以序列的方式写出,如 表示十进制下的 。
请注意,你需要求解的是「取模前最小的和对 取模的结果」,而非「对 取模后最小的和」。
作为提示,由 可知 对 取模的结果为 ,因此你可以使用 而非 进行计算来避免不必要的溢出问题。
题目背景纯属虚构,不影射现实中的任何个人或团体。
>>> [1, 2, 4, 8, 16, 32, 64, 128].sort()
[1, 128, 16, 2, 32, 4, 64, 8]
一个很少有地球人知道的事实是,自 2015 年起,我们的吉祥物 Sleeping Kangaroo 每年 12 月 31 日都会乘飞机前往堪培拉,参加一场由外星人组织的星际 JavaScript 研讨会,与外星人们互相分享各自的 JavaScript 编程经验,并在随后举办的友谊赛中切磋技艺,11 年来受益匪浅。
时间来到 2026 年 1 月 6 日,这是 2025 - 2026 年度第 11 届星际 JavaScript 研讨会日程的第七天,主持人正在揭晓友谊赛的比赛成绩,而整个研讨会也将在第二天结束。
「下面揭晓各题目通过情况!问题 A,提交 4881 人,通过 4880 人……」
「啊?」Sleeping Kangaroo 大吃一惊,因为上次有人没能在友谊赛中通过问题 A 还是在 10 年前的 2015 - 2016 年度第 1 届星际 JavaScript 研讨会。
颁奖典礼结束后,Sleeping Kangaroo 找到了这位倒霉的研讨会会员,开始耐心地帮他复盘。
「我……我只是个 JavaScript 新手,很多知识点还不熟。对于场上的问题 A,我对着那个传进来的正整数数组直接调用了 sort 方法,然后……然后……」
正如你在题目背景开头看到的,JavaScript 对正整数数组的默认排序行为是对这些正整数按一般书写习惯(高位在前,省略前导 0)写成字符串后按字符串的字典序排升序,而不是按照这些正整数的实际大小排升序。
「让我来教教你吧,sort 方法在对数字排序时要用 sort((a, b) => a - b) 来按照数字大小排升序,而不能使用默认的比较方式。举个例子,对于问题 A 的样例……样例……」
咦,题目归档中的样例呢?
Sleeping Kangaroo 知道,现在要是跑去组委会获取样例的话,这位会员会等得不耐烦的。为了方便分析,你能帮 Sleeping Kangaroo 构造一个这样的序列,使得这 个正整数的和最小吗?