#P14906. [NHSPC 2024] 數字叢集

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

[NHSPC 2024] 數字叢集

题目描述

小明暑假期間在某實驗室實習,主要工作就是協助實驗室整理大量的實驗數據。 實驗室累積了許多數據資料,但因設備及管理等問題,小明發現有些數據可能登記錯誤; 這些記錯的數字恰好為原數字的兩個位數被互換, 例如數字 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 合併,形成更大的群。

小明想知道這些數據可以分成幾群,群的個數越小越好,和最大的群有多少數字。請寫一個程式幫助小明完成此任務。

输入格式

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

输出格式

GnGmG_n \quad G_m
  • GnG_n 代表分群後群的個數。
  • GmG_m 代表分群後最大的群有幾個數字。
2
1234 1324
1 2
6
1234 1324 2134 7 3 30
3 3

提示

測資限制

  • 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 無額外限制。