#P15928. [Roi2020 Regional]自动取款机

[Roi2020 Regional]自动取款机

题目描述

现在正在开发一种万能自动取款机,它可以适用于任意货币系统。

设某个国家的货币系统中有 nn 种纸币,面额分别为:

a1,a2,,an.a_1,a_2,\ldots,a_n.

所有面额互不相同,并按升序给出:

a1<a2<<an,a_1<a_2<\cdots<a_n,

且保证:

a1=1.a_1=1.

自动取款机使用如下贪心算法发放纸币。

若客户请求金额为 cc,初始时取款机准备发放的纸币集合为空。每一步,它会加入一张面额尽可能大的纸币,使得当前纸币总面额仍不超过 cc。当纸币总面额等于 cc 时,算法停止。

因为存在面额为 11 的纸币,所以算法一定会在有限步内结束。

为了评估这个贪心算法的效率,需要知道:如果客户最多可以请求金额 bb,那么一次取款最多可能发放多少张纸币。

由于不同客户类别的最大可请求金额不同,你需要回答 qq 个询问 b1,b2,,bqb_1,b_2,\ldots,b_q

对于每个询问,请找出一个不超过 bib_i 的金额,使得自动取款机按上述贪心算法发放的纸币张数最多,并输出该金额以及对应张数。

输入格式

第一行包含整数 nn,表示纸币面额种类数。

第二行包含 nn 个互不相同的整数 aia_i,按升序给出。

第三行包含整数 qq,表示询问个数。

接下来 qq 行,每行包含一个整数 bib_i

输出格式

对于每个询问,输出两个整数:

  • 一个不超过 bib_i 的金额;
  • 请求该金额时,贪心算法发放的最大纸币张数。

如果有多个金额都能达到最大纸币张数,输出任意一个即可。

数据范围

1n200000,1\le n\le 200000, 1=a1<a2<<an1018,1=a_1<a_2<\cdots<a_n\le 10^{18}, 1q200000,1\le q\le 200000, 1bi1018.1\le b_i\le 10^{18}.

子任务

子任务 分值 附加限制 依赖子任务 反馈
1 13 n500,q5,ai500,bi500n\le 500,\,q\le 5,\,a_i\le 500,\,b_i\le 500 - 第一错误
2 18 n=60,q5,ai=2i1n=60,\,q\le 5,\,a_i=2^{i-1}
3 20 q5,bi2105q\le 5,\,b_i\le 2\cdot 10^5 1
4 21 q5q\le 5 1, 2, 3
5 28 无额外限制 1–4

样例输入

4
1 5 10 50
3
2
8
50

样例输出

2 2
8 4
49 9

样例解释

在样例中:

  • 请求 22 时,取款机发放 1+11+1,共 22 张;
  • 请求 88 时,取款机发放 5+1+1+15+1+1+1,共 44 张;
  • 请求 4949 时,取款机发放 10+10+10+10+5+1+1+1+110+10+10+10+5+1+1+1+1,共 99 张。

题目 8. 海报