CF1043B Lost Array

题目描述

Bajtek 以其非凡的天赋而闻名,最近他得到了一个整数数组 $x_0, x_1, \ldots, x_{k-1}$。 不幸的是,在与他那些非同寻常的朋友们举办了一场盛大的数组派对后,他发现自己把这个数组弄丢了。经过数小时的寻找新玩具,Bajtek 在数组生产商的网站上找到了另一个长度为 $n+1$ 的数组 $a$。根据 $a$ 的正式描述,$a_0 = 0$,对于所有其他 $i$($1 \le i \le n$),有 $a_i = x_{(i-1)\bmod k} + a_{i-1}$,其中 $p \bmod q$ 表示 $p$ 除以 $q$ 的余数。 例如,如果 $x = [1, 2, 3]$ 且 $n = 5$,则: - $a_0 = 0$, - $a_1 = x_{0\bmod 3} + a_0 = x_0 + 0 = 1$, - $a_2 = x_{1\bmod 3} + a_1 = x_1 + 1 = 3$, - $a_3 = x_{2\bmod 3} + a_2 = x_2 + 3 = 6$, - $a_4 = x_{3\bmod 3} + a_3 = x_0 + 6 = 7$, - $a_5 = x_{4\bmod 3} + a_4 = x_1 + 7 = 9$。 所以,如果 $x = [1, 2, 3]$ 且 $n = 5$,那么 $a = [0, 1, 3, 6, 7, 9]$。 现在,Bajtek 希望能够通过 $a$ 恢复出 $x$!已知 $1 \le k \le n$,请帮助他找出所有可能的 $k$ 的值——即丢失数组可能的长度。

输入格式

第一行包含一个整数 $n$($1 \le n \le 1000$)——数组 $a$ 的长度,不包括元素 $a_0$。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^6$)。 注意,$a_0$ 始终为 $0$,且不会在输入中给出。

输出格式

输出的第一行应包含一个整数 $l$,表示丢失数组可能的长度的个数。 第二行应包含 $l$ 个整数,按升序排列,表示丢失数组可能的长度。

说明/提示

在第一个样例中,任意 $k$ 都是合适的,因为 $a$ 是等差数列。 可能的数组 $x$: - $[1]$ - $[1, 1]$ - $[1, 1, 1]$ - $[1, 1, 1, 1]$ - $[1, 1, 1, 1, 1]$ 在第二个样例中,Bajtek 的数组可以有三个或五个元素。 可能的数组 $x$: - $[1, 2, 2]$ - $[1, 2, 2, 1, 2]$ 例如,$k = 4$ 是不合适的,因为这会导致 $6 + x_0 = 8$ 和 $0 + x_0 = 1$,显然矛盾。 在第三个样例中,只有 $k = n$ 是合适的。 数组 $[1, 4, -2]$ 满足要求。 注意,$x_i$ 可能为负数。 由 ChatGPT 4.1 翻译