1453 : 货币系统

时间限制Time Limit 1 Sec 内存限制Memory Limit 256 MB 提交次数Submitted 0 Times 通过次数Solved 0 Times 标准评测Standard Judge

题目描述Description

给定一个长度为 n 的升序数组 A,第 i 项的值为 A_i,其中 A_1=1

用这个数组构建一个货币系统,对于任意正整数 x,定义换钱张数函数为 f(x,n),其中 n 为数组长度。这个函数表示使用这一套货币系统支付 x 元时,如果要满足尽量先拿大面额纸币再拿小面额纸币的原则,需要拿出多少张纸币。对于任意正整数 x 和一个正整数 y\in [1,n]f(x,y) 满足:

f(x,y)= \begin{cases} \lfloor\frac{x}{A_y}\rfloor+f(x\bmod A_y, y-1) & y > 1\\ x & y = 1 \end{cases}

你需要处理 q 组询问,每一组询问会给出一个整数 m,请回答有多少个正整数 x 满足 f(x,n)=m

输入格式Input

输入第一行有两个正整数 nq1\le n\le 10^5,1\le q\le 10^6),表示数组 A 的长度和询问次数。

第二行有 n 个正整数 A_1,A_2,\ldots,A_n1=A_1<A_2<\ldots<A_n\le 10^6),表示数组 A

第三行有 q 个整数 m_1,m_2,\ldots,m_q1\le m_i\le 10^9),其中 m_i 表示第 i 次询问的整数。

输出格式Output

输出一行 q 个用空格隔开的整数,第 i 个整数表示第 i 次询问的答案。

样例Sample

提示Hint

对于样例,给出的货币系统中纸币面额有 1 元、5 元、10 元、20 元、50 元和 100 元六种。按照规则,当你要支付 6 元时只能拿出两张纸币,即一张 1 元和一张 5 元,也就是 f(6,6)=2。虽然支付 6 元也可以使用六张 1 元,但是这种方案并不满足尽量拿大面额纸币的原则,也不满足本题函数的定义。

出题Author

UESTC

来源Source

广东省第二十二届大学生程序设计竞赛(GDCPC2025)