P14906 [NHSPC 2024] 数字丛集
题目描述
小明暑假期间在某实验室实习,主要工作就是协助实验室整理大量的实验数据。
实验室累积了许多数据资料,但因设备及管理等问题,小明发现有些数据可能登记错误;这些记错的数字**恰好为原数字的两个位数被互换**,例如数字 $1234$ 被记录成 $1324$ 或者数字 $300$ 被记成 $3$ 等等。
小明希望你写出一个程序检查哪些资料有可能被登记错误,具体来说他定义了一个关系函数 $P(a, b)$,若 $a$ 将某两个位数互换后与 $b$ 相等,则 $P(a, b) = \text{True}$;否则 $P(a, b) = \text{False}$。
举例来说 $P(300, 3) = \text{True}$,因为 $300$ 的第一位数和第三位数互换时会变成 $3$;但 $P(1234, 2143) = \text{False}$,因为交换任何两个位数都无法变成相同的数字。
小明想要将 $n$ 个相异的非负整数 $a_1, a_2, \cdots a_n$ 运用关系函数 $P$ 来加以分群。
开始时,每一个数字可以自成一群,对于一个数字 $x$ 和一个群 $S$,如果 $S$ 有一个成员 $y$ 使得 $P(x, y) = \text{True}$,则将 $x$ 所在的群与 $S$ 合并,形成更大的群。
小明想知道这些数据可以分成几群,群的个数越小越好,和最大的群有多少数字。请写一个程序帮助小明完成此任务。
输入格式
$$\begin{aligned} &n \\ &a_1 \ a_2 \ \ldots \ a_n \end{aligned}$$
* $n$ 代表数字的个数。
* $a_i$ 代表第 $i$ 个想分群的整数。
输出格式
$$G_n \quad G_m$$
* $G_n$ 代表分群后群的个数。
* $G_m$ 代表分群后最大的群有几个数字。
说明/提示
### 数据限制
* $2 \le n \le 100$。
* $a_i$ 的位数小于等于 $5000$,$n$ 个数字皆相异且数字的前面不会有不必要的 $0$ (leading zero)。
* 输入的数皆为非负整数。
### 评分说明
本题共有三组子任务,条件限制如下所示。
每一组可有一或多笔测试资料,该组所有测试资料皆需答对才会获得该组分数。
| 子任务 | 分数 | 额外输入限制 |
| :----: | :----------------: | --------------- |
| 1 | 15 | $n \le 20$ 且 $a_i$ 的位数等于 $5$。 |
| 2 | 28 | $a_i$ 的位数小于等于 $500$。 |
| 3 | 57 | 无额外限制。 |