#P16676. [CSPro 27] 如此编码

[CSPro 27] 如此编码

背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/

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

题目描述

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

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

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

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

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

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

m=i=1nci1×bi(1)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}$$

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

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

输入格式

从标准输入读入数据。

输入共两行。

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

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

输出格式

输出到标准输出。

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

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
4 0
2 3 2 5
0 0 0 0
7 23333
3 5 20 10 4 3 10
2 2 15 7 3 1 0

提示

样例 3 解释

:::align{center} | ii | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | | aia_i | 3 | 5 | 20 | 10 | 4 | 3 | 10 | | bib_i | 2 | 2 | 15 | 7 | 3 | 1 | 0 | | ci1c_{i-1} | 1 | 3 | ^ | 300 | 3000 | 12000 | 36000 | :::

子任务

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

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

提示

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

m%cj=i=1jci1×bim \% c_j = \sum_{i=1}^{j} c_{i-1} \times b_i

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

m%c1=c0×b1(3)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}$$(6)\dots \tag{6}