luogu#P9789. [ROIR 2020 Day 2] ATM

[ROIR 2020 Day 2] ATM

题目描述

译自 ROIR 2020 Day2 T3. Банкомат,译者ksyx

你正在开发一个多面额 ATM,称为 Universal ATM。具体地说,现在有 nn 种升序排序的面额分别为 a1, a2, , ana_1,~a_2,~\ldots,~a_n 的纸币,即对于 i>2i>2,有 ai1<aia_{i-1}<a_i。除此之外,还保证 a1=1a_1=1

假设客户要取总额为 cc 的纸币,你开发的 ATM 将使用如下算法进行纸币的分配:每次选取一个选取后发给用户的总金额不超过 cc 最大面额,直至总金额达到 cc。因为存在面额为 11 的纸币,我们可以发现这个算法总是能够结束。

为了评估这个算法的效率,你想知道对于总额不超过 bb 的请求最大需要多少张纸币。因为业务场景不同,你总共需要回答 qq 个场景下的询问 b1, b2, , bqb_1,~b_2,~\ldots,~b_q

你的任务是编写一个程序,根据给出的面额列表确定在不同业务场景下最大需要多少张纸币。

输入格式

第一行一个整数 nn,表示面额的数量。

接下来一行 nn 个整数 aia_i

第三行一个整数 qq,表示询问的数量。

接下来 qq 行每行一个整数 bib_i

输出格式

对于每一个询问,输出两个整数,分别表示取出纸币数量最多的情况下客户取出的总额和取出纸币的数量。如果多个不超过输入中最大总额的取款请求都对应这个纸币数量,输出任意一个。

4
1 5 10 50
3
2
8
50
2 2
8 4
49 9

提示

【样例 1 解释】

各个询问的一种可行解如下:

2=1+12=1+18=5+1+1+18=5+1+1+149=10+10+10+10+5+1+1+1+149=10+10+10+10+5+1+1+1+1

【数据范围】

对于 100%100\% 的数据,有 1n2×105, 1\le n\le 2\times 10^5,~1=a1<a2<<an1018, 1=a_1<a_2<\ldots<a_n\le10^{18},~1q2×105, 1\le q\le 2\times 10^5,~1bi1081\le b_i\le 10^8

各子任务详情如下:

子任务编号 分值 限制
11 1313 1n500, q5, 1ai,bi5001 \le n \le 500,~q\le 5,~1\le a_i,b_i\le500
22 1818 n=60, q5, ai=2i1n=60,~q\le 5,~a_i=2^{i-1}
33 2020 q5, bi2×105q\le 5,~b_i\le 2\times 10^5
44 2121 q5q\le 5
55 2828