9533.取模

Time Limit: 4s Memory Limit: 512MB

给定一个长为 $n$ 的数组 $a_1,a_2,\dots, a_n$,其中 $0\leq a_i \leq m$。你需要找到所有整数 $k\ge 1$,使得可重集 ${a_1 \bmod k,a_2 \bmod k,\dots a_n \bmod k}$ 中刚好有 $c$ 种不同的数,且每种数刚好出现 $\frac{n}{c}$ 次。如果存在无数个满足条件的 $k$,输出 $-1$。

Input Format(From the terminal/stdin)

第一行包含一个整数 $T$ ($1\leq T \leq 10^4$),表示一共有 $T$ 组测试数据。

对于每组测试数据:

第一行为三个整数 $n,m,c$ ($1\leq n,m\leq 5\cdot 10^5,1\leq c\leq \min(n,100)$),表示数组 $a$ 中数的个数,数组 $a$ 中数的上限和取模后数组 $a$ 中不同数的种类数。保证 $\frac{n}{c}$ 是一个整数。

第二行为 $n$ 个整数 $a_1,a_2,\dots a_n$ ($0\leq a_i \leq m$),表示数组 $a$。

保证所有测试数据的 $n$ 之和不超过 $2 \cdot 10^6$,保证所有测试数据的 $m$ 之和不超过 $2\cdot 10^6$。

Output Format(To the terminal/stdout)

对于每组测试数据,如果存在无数个满足条件的 $k$,输出 $-1$。否则,先输出一个正整数 $cnt$,表示满足条件的 $k$ 的总数,然后在同一行中按从小到大的顺序输出 $cnt$ 个数,表示所有满足条件的 $k$。

Sample Input

Copy
5
6 3 3
0 0 3 3 3 3
6 3 2
0 0 0 3 3 3
6 100 3
18 91 32 43 14 57
4 8 2
2 7 1 8
10 10 5
3 1 4 1 5 9 2 6 5 3 \n
 · · \n
 · · · · · \n
 · · \n
 · · · · · \n
 ·   · \n
  ·  ·  ·  ·  ·  \n
 · · \n
 · · · \n
  ·  · \n
 · · · · · · · · · \n

Sample Output

Copy
0
-1
2 3 7
3 2 3 6
0 \n
  \n
 · · \n
 · · · \n
 \n
Source: 2025“钉耙编程”中国大学生算法设计暑期联赛(6), HDU, 8049

Submit

请先 登录

© 2025 FAQs