#lydlx02x0902. 虫食算

虫食算

虫食算

题目描述

所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。

问题限制:

  1. 只考虑N进制加法,算式中三个数都有N位,允许有前导的0。
  2. 虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。

进制与字母表示

如果这个算式是 N进制 的,我们就取英文字母表的前 N 个大写字母来表示这个算式中的 0 到 N−1 这 N 个不同的数字。

注意: 这 N 个字母并不一定顺序地代表 0 到 N−1(即A不一定代表0,B不一定代表1等)。

输入保证

输入数据保证:

  • N 个字母分别至少出现一次
  • 有且仅有一组解

输入格式

输入包含 4 行:

第一行有一个正整数 N (N26)(N \le 26)

后面的 3 行每行有一个由大写字母组成的字符串,分别代表两个加数以及

这 3 个字符串左右两端都没有空格,并且恰好有 N 位。

输出格式

输出包含一行。

在这一行中,应当包含唯一的那组解。

解是这样表示的:输出 N 个数字,分别表示 A,B,C…… 所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。

数据范围

N26N \le 26

输入样例

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