编程题
### 问题描述 时空局的一周有 $11$ 天,这一天,时空局发布紧急任务,有一个时空战犯在今后 $n$ 天的时间线中进行逃窜,由于时空的独特性,我们可以把时间看成节点,也就是每一天看成一个节点。每一天会有一个能量值 $g_i$,我们定义函数 $h(x)$ 为 $x$ 在十进制下的数位和,例如 $h(192) = 1 + 9 + 2 = 12$,同时定义 $f(x)$: $$ f(x) = \begin{cases} x \quad (x \lt 10) \\\\ f(h(x)) \quad (x \ge 10) \end{cases} $$ 当两个时间节点满足 $f(g')$ 相同时,那么这两个时间可以相互传送;或者两个时间点恰好相隔一周时,也可以相互传送。 一个战犯在 $1 \sim n$ 的时间节点中逃窜,时空局会派出若干的时空战警,每个战警会选择一个任意节点 $S_t$ 作为起始节点然后选择一些时间节点开始巡逻,具体来说,需要满足以下性质,假设该时空战警巡逻的点为 $a_1,a_2,a_3,...,a_k$,那么需要满足以下条件: 1. $a_1 \lt a_2 \lt a_3 \lt ... \lt a_k$。 2. 对于 $i \gt 1$,需要满足 $f(g_{a_i}) = f(g_{a_{i-1}})$ **或者**满足 $|g_{a_i}$ - $g_{a_{i-1}}| = 11$。 同时由于时空串扰的关系,每两个时空战警之间巡逻的时空节点之间不能存在相同的点,例如:$A$ 战警巡逻 $\lbrace 1, 4, 5\rbrace$,$B$ 战警巡逻 $\lbrace 2, 3, 6\rbrace$,这是合法的;但是如果$B$ 战警巡逻 $\lbrace 2, 3, 4\rbrace$,就会发生时空串扰,产生不可预料的后果。 时空局都是一群很聪明的人,他们想要派出最少的人,使得每一个时空节点都会至少有一个时空战警巡逻到。 于是时空局伟大的机器 Timer 开始计算,当派出 $1$ 个人的时候,最多可以巡逻到多少个点?当派出 $2$ 个人的时候,最多可以巡逻多少个点? ······ 当派出 $n$ 个人的时候最多可以巡逻多少个点? 突然,时空光圈发出巨大的光芒,你回过神来发现,你变成了 Timer,你开始执行这些计算任务。 具体来说,你需要回答当派出 $1 \sim n$ 个人时,分别最多可以巡逻到多少个时空节点。 ### 输入格式 第一行输入一个整数 $n$,表示时空节点的数量。 第二行输入 $n$ 个整数 $g_1, g_2, g_3, ..., g_i ,..., g_n$,表示第 $i$ 天的能量值。 ### 输出格式 输出一行,包含 $n$ 个整数 $t_1, t_2, t_3, ..., t_n$,用空格隔开,表示在派出 $i$ 个人时可以巡逻的最多的节点数量。 ### 样例输入 ``` 4 9 29 45 32 ``` ### 样例输出 ``` 2 3 4 4 ``` ### 说明 - 派出一个人时,一种最多的巡逻方案是:$\lbrace 1,3 \rbrace$。 - 派出两个人时,一种最多的巡逻方案是:$\lbrace 1,3 \rbrace, \lbrace 2 \rbrace$。 - 派出三个人时,一种最多的巡逻方案是:$\lbrace 1,3 \rbrace, \lbrace 2 \rbrace, \lbrace 4 \rbrace$。 - 派出四个人时,一种最多的巡逻方案是:$\lbrace 1 \rbrace,\lbrace 2 \rbrace, \lbrace 3 \rbrace, \lbrace 4 \rbrace$。 ### 评测数据范围 $1 \le n \le 5000, 1 \le g_i \le 10^9$。
查看答案
赣ICP备20007335号-2