#P14906. [NHSPC 2024] 數字叢集

    ID: 14825 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>并查集2024广度优先搜索 BFS台湾

[NHSPC 2024] 數字叢集

Description

小明暑假期间在某实验室实习,主要工作就是协助实验室整理大量的实验数据。 实验室累积了许多数据资料,但因设备及管理等问题,小明发现有些数据可能登记错误; 这些记错的数字恰好为原数字的两个位数被互换, 例如数字 12341234 被记录成 13241324 或者数字 300300 被记成 33 等等。

小明希望你写出一个程序检查哪些资料有可能被登记错误,具体来说他定义了一个关系函数 P(a,b)P(a, b), 若 aa 将某两个位数互换后与 bb 相等,则 P(a,b)=TrueP(a, b) = \text{True};否则 P(a,b)=FalseP(a, b) = \text{False}。 举例来说 P(300,3)=TrueP(300, 3) = \text{True}, 因为 300300 的第一位数和第三位数互换时会变成 33; 但 P(1234,2143)=FalseP(1234, 2143) = \text{False},因为交换任何两个位数都无法变成相同的数字。

小明想要将 nn 个相异的非负整数 a1,a2,ana_1, a_2, \cdots a_n 运用关系函数 PP 来加以分群。 开始时,每一个数字可以自成一群, 对于一个数字 xx 和一个群 SS, 如果 SS 有一个成员 yy 使得 P(x,y)=TrueP(x, y) = \text{True}, 则将 xx 所在的群与 SS 合并,形成更大的群。

小明想知道这些数据可以分成几群,群的个数越小越好,和最大的群有多少数字。请写一个程序帮助小明完成此任务。

Input Format

$$\begin{aligned} &n \\ &a_1 \ a_2 \ \ldots \ a_n \end{aligned}$$
  • nn 代表数字的个数。
  • aia_i 代表第 ii 个想分群的整数。

Output Format

GnGmG_n \quad G_m
  • GnG_n 代表分群后群的个数。
  • GmG_m 代表分群后最大的群有几个数字。
2
1234 1324
1 2
6
1234 1324 2134 7 3 30
3 3

Hint

数据限制

  • 2n1002 \le n \le 100
  • aia_i 的位数小于等于 50005000nn 个数字皆相异且数字的前面不会有不必要的 00 (leading zero)。
  • 输入的数皆为非负整数。

评分说明

本题共有三组子任务,条件限制如下所示。 每一组可有一或多笔测试资料,该组所有测试资料皆需答对才会获得该组分数。

子任务 分数 额外输入限制
1 15 n20n \le 20aia_i 的位数等于 55
2 28 aia_i 的位数小于等于 500500
3 57 无额外限制。