#lydlx02x0902. 虫食算
虫食算
虫食算
题目描述
所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。
问题限制:
- 只考虑N进制加法,算式中三个数都有N位,允许有前导的0。
- 虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。
进制与字母表示
如果这个算式是 N进制 的,我们就取英文字母表的前 N 个大写字母来表示这个算式中的 0 到 N−1 这 N 个不同的数字。
注意: 这 N 个字母并不一定顺序地代表 0 到 N−1(即A不一定代表0,B不一定代表1等)。
输入保证
输入数据保证:
- N 个字母分别至少出现一次
- 有且仅有一组解
输入格式
输入包含 4 行:
第一行有一个正整数 N
后面的 3 行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。
这 3 个字符串左右两端都没有空格,并且恰好有 N 位。
输出格式
输出包含一行。
在这一行中,应当包含唯一的那组解。
解是这样表示的:输出 N 个数字,分别表示 A,B,C…… 所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。
数据范围
输入样例
5
ABCED
BDACE
EBBAA
输出样例
1 0 3 4 2
样例解释
对于输入样例:
- N = 5(5进制)
- 加数1:
ABCED - 加数2:
BDACE - 和:
EBBAA
我们需要为字母 A、B、C、D、E 分别分配数字 0-4,使得下面的5进制加法成立:
ABCED
+ BDACE
--------
EBBAA
唯一解是:
- A = 1
- B = 0
- C = 3
- D = 4
- E = 2
验证(5进制):
10342
+ 04132
--------
14424
转换为5进制验证:
- 10342₅ = 1×5⁴ + 0×5³ + 3×5² + 4×5¹ + 2×5⁰ = 625 + 0 + 75 + 20 + 2 = 722₁₀
- 04132₅ = 0×5⁴ + 4×5³ + 1×5² + 3×5¹ + 2×5⁰ = 0 + 500 + 25 + 15 + 2 = 542₁₀
- 和应为:722 + 542 = 1264₁₀
- 14424₅ = 1×5⁴ + 4×5³ + 4×5² + 2×5¹ + 4×5⁰ = 625 + 500 + 100 + 10 + 4 = 1239₁₀
注意: 实际上这是N进制加法,需要处理进位。样例输出表明字母与数字的对应关系,实际验证时应考虑N进制运算规则。
时空限制
- 时间限制:1秒
- 空间限制:64MB