#573. 如此编码

    ID: 573 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 2 上传者: 标签>CCF CSP认证第 27 次CCF CSP软件能力认证基础算法模拟

如此编码

问题描述

某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思……

已知某次测验包含 nn 道单项选择题,其中第 ii 题(1in1\le i\le n)有 aia_i 个选项,正确选项为 bib_i,满足 ai2a_i\ge20biai0\le b_i \le a_i。比如说,ai=4a_i=4 表示第 ii 题有 44 个选项,此时正确选项 bib_i 的取值一定是 0,1,2,30,1,2,3 其中之一。

顿顿老师设计了如下方式对正确答案进行编码,使得仅用一个整数 mm 便可表示 b1,b2,,bnb_1,b_2,\dots,b_n

首先定义一个辅助数组 cic_i,表示数组 aia_i 的前缀乘积。当 1in1\le i\le n 时,满足:

ci=a1×a2××aic_i=a_1\times a_2\times\cdots\times a_i

特别地,定义 c0=1c_0=1

于是 mm 便可按照如下公式算出:

$$m=\sum_{i=1}^{n} c_{i-1}\times b_i = c_0 b_1 + c_1 b_2 + \cdots + c_{n-1} b_n. $$

易知,0mcn0\le m \le c_n,最小值和最大值分别当 bib_i 全部为 00bi=ai1b_i=a_i-1 时取得。

试帮助小 P 同学,把测验的正确答案 b1,b2,,bnb_1,b_2,\dots,b_n 从顿顿老师留下的神秘整数 mm 中恢复出来。

输入格式

输入共两行。

第一行包含用空格分隔的两个整数 nnmm,分别表示题目数量和顿顿老师的神秘数字。

第二行包含用空格分隔的 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n,依次表示每道选择题的选项数目。

输出格式

输出仅一行,包含用空格分隔的 nn 个整数 b1,b2,,bnb_1,b_2,\dots,b_n,依次表示每道选择题的正确选项。

输入样例 1

15 32767
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

输出样例 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输入样例 2

4 0
2 3 2 5

输出样例 2

0 0 0 0

输入样例 3

7 23333
3 5 20 10 4 3 10

输出样例 3

2 2 15 7 3 1 0

说明

样例 3 解释

提示

对任意的 1jn1\le j\le n,因为 cj+1,cj+2,c_{j+1},c_{j+2},\dots 均为 cjc_j 的倍数,所以 mm 除以 cjc_j 的余数具有如下性质:

mmodcj=i=1jci1bim \bmod c_j = \sum_{i=1}^{j} c_{i-1} b_i

其中 mod\bmod 表示取余运算。令 jj 取不同的值,则有如下等式:

$$m \bmod c_1,\quad m \bmod c_2,\quad m \bmod c_3,\ \dots $$

分别等于

$$c_0 b_1,\quad c_0 b_1 + c_1 b_2,\quad c_0 b_1 + c_1 b_2 + c_2 b_3,\ \dots $$

数据范围

50%50\% 的测试数据满足:aia_i 全部等于 22,即每道题均只有两个选项,此时 ci=2ic_i=2^i

全部的测试数据满足:1n201\le n\le 20ai2a_i\ge2cn109c_n\le 10^9(根据题目描述中的定义 cnc_n 表示全部 aia_i 的乘积)。