P16676 [CSPro 27] 如此编码

题目背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:。 某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思……

题目描述

已知某次测验包含 $n$ 道单项选择题,其中第 $i$ 题($1 \leq i \leq n$)有 $a_i$ 个选项,正确选项为 $b_i$,满足 $a_i \geq 2$ 且 $0 \leq b_i < a_i$。比如说,$a_i = 4$ 表示第 $i$ 题有 4 个选项,此时正确选项 $b_i$ 的取值一定是 0、1、2、3 其中之一。 顿顿老师设计了如下方式对正确答案进行编码,使得仅用一个整数 $m$ 便可表示 $b_1, b_2, \cdots, b_n$。 首先定义一个辅助数组 $c_i$,表示数组 $a_i$ 的前缀乘积。当 $1 \leq i \leq n$ 时,满足: $$c_i = a_1 \times a_2 \times \cdots \times a_i$$ 特别地,定义 $c_0 = 1$。 于是 $m$ 便可按照如下公式算出: $$m = \sum_{i=1}^{n} c_{i-1} \times b_i \tag{1}$$ $$= c_0 \times b_1 + c_1 \times b_2 + \cdots + c_{n-1} \times b_n \tag{2}$$ 易知,$0 \leq m < c_n$,最小值和最大值分别当 $b_i$ 全部为 0 和 $b_i = a_i - 1$ 时取得。 试帮助小 P 同学,把测验的正确答案 $b_1, b_2, \cdots, b_n$ 从顿顿老师留下的神秘整数 $m$ 中恢复出来。

输入格式

从标准输入读入数据。 输入共两行。 第一行包含用空格分隔的两个整数 $n$ 和 $m$,分别表示题目数量和顿顿老师的神秘数字。 第二行包含用空格分隔的 $n$ 个整数 $a_1, a_2, \cdots, a_n$,依次表示每道选择题的选项数目。

输出格式

输出到标准输出。 输出仅一行,包含用空格分隔的 $n$ 个整数 $b_1, b_2, \cdots, b_n$,依次表示每道选择题的正确选项。

说明/提示

### 样例 3 解释 :::align{center} | $i$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | | $a_i$ | 3 | 5 | 20 | 10 | 4 | 3 | 10 | | $b_i$ | 2 | 2 | 15 | 7 | 3 | 1 | 0 | | $c_{i-1}$ | 1 | 3 | ^ | 300 | 3000 | 12000 | 36000 | ::: ### 子任务 50% 的测试数据满足:$a_i$ 全部等于 2,即每道题均只有两个选项,此时 $c_i = 2^i$; 全部的测试数据满足:$1 \leq n \leq 20$,$a_i \geq 2$ 且 $c_n \leq 10^9$(根据题目描述中的定义 $c_n$ 表示全部 $a_i$ 的乘积)。 ### 提示 对任意的 $1 \leq j \leq n$,因为 $c_{j+1}, c_{j+2}, \cdots$ 均为 $c_j$ 的倍数,所以 $m$ 除以 $c_j$ 的余数具有如下性质: $$m \% c_j = \sum_{i=1}^{j} c_{i-1} \times b_i$$ 其中 $\%$ 表示取余运算。令 $j$ 取不同的值,则有如下等式: $$m \% c_1 = c_0 \times b_1 \tag{3}$$ $$m \% c_2 = c_0 \times b_1 + c_1 \times b_2 \tag{4}$$ $$m \% c_3 = c_0 \times b_1 + c_1 \times b_2 + c_2 \times b_3 \tag{5}$$ $$\dots \tag{6}$$