#171. 彩石
彩石
问题描述
N 个石子自左向右排成一排,第 i 个石子的颜色为 ai。
你可以选择一个整数 k,自左向右每 k 个石子为一段,把 N 个石子分成若干个子段。如果最后一段石子数不足 k 个,则把最后一段石子全部扔掉。
如果两个子段对应位置的石子颜色均相同,则可以视作相同的子段。
注意:子段可以翻转,比如颜色为 1 2 3 的子段和颜色为 3 2 1 的子段被视作相同的子段。
请你选择合适的 k 的值,使得不同子段的数目最多。
你需要输出这个最多数目 Max,以及能达到这个数目的合适的 k 的值有多少个(Num),以及有哪些。
输入
第一行,一个整数 N
接下来一行,N 个整数 ai,表示第 i 个石子的颜色。
输出
第一行:两个整数 Max,Num,一个空格分隔
第二行:Num 个数,表示所有合适的 k 值,从小到大输出,一个空格分隔
样例输入
8
1 2 3 3 2 1 2 3
样例输出
3 2
1 2
样例解释
若 k=1,则可以得到 3 个不同的子段 < 1 >, < 2 >, < 3 >
若 k=2,则可以得到 3 个不同的子段 < 1 2 >, < 3 3 >, < 2 3 >
若 k=3,则可以得到 1 个不同的子段 < 1 2 3 >
若 k=4,则可以得到 2 个不同的子段 < 1 2 3 3 >, < 2 1 2 3 >
若 k>=5 且 k <= 8,则只能得到 1 个不同的子段
综上,当 k=1 或 2 时,可以得到最多 3 个不同的子段
数据范围
约 45% 的数据:n <= 500
100%的数据:n <= 2×10^5, 1 <= ai <= n