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 翻译