CF865E Hex Dyslexia
题目描述
手动拷贝大型十六进制(以 16 为基数)字符串时容易出错,但人们仍然会这样做。你发现了代码中的一个 bug,很有可能是因为有人在拷贝十六进制字符串时犯了错误。你怀疑这人没有更改字符串中的任何数字,也没有改变字符串的长度,而只是随意地对字符串中的各个数字进行了排列。例如,如果原始字符串是 $0abc$,他可能修改成了 $a0cb$ 或 $0bca$,但不会变成 $abc$ 或 $0abb$。
不幸的是,你无法获得原始字符串以及被拷贝的字符串,但你知道这些字符串的长度以及它们的数值之差的绝对值。你会得到这个差值的十六进制字符串 $S$,该字符串已经用零扩展到了与原始字符串、被拷贝字符串相同的长度。请你确定原始字符串可能的最小数值。
输入格式
输入包含一个十六进制字符串 $S$,仅由数字 $0$ 到 $9$ 和小写英文字母 $a$ 到 $f$ 组成,长度不超过 $14$,且至少有一个字符不是 $0$。
输出格式
如果无解,输出 “NO”(不带引号)。
否则,输出对应于最小可能数值的十六进制字符串,需包含任何必要的前导零以保证长度正确。
说明/提示
十六进制字符串的数值计算方法是,将每一位乘以 $16$ 的幂次,最右边的数字乘以 $16^{0}$。大于 $9$ 的十六进制数字用字母表示:$a=10, b=11, c=12, d=13, e=14, f=15$。
例如,十六进制字符串 $0f1e$ 的数值为 $0 \cdot 16^{3} + 15 \cdot 16^{2} + 1 \cdot 16^{1} + 14 \cdot 16^{0} = 3870$,$00f1$ 的数值为 $0 \cdot 16^{3} + 0 \cdot 16^{2} + 15 \cdot 16^{1} + 1 \cdot 16^{0} = 241$,$100f$ 的数值为 $1 \cdot 16^{3} + 0 \cdot 16^{2} + 0 \cdot 16^{1} + 15 \cdot 16^{0} = 4111$。由于 $3870 + 241 = 4111$,且 $00f1$ 是 $100f$ 的一个排列,$00f1$ 是第二个测试用例的一个合法答案。
由 ChatGPT 5 翻译