#aBC231E. [ABC231E] Minimal payments

[ABC231E] Minimal payments

AT_abc231_e [ABC231E] Minimal payments

题目描述

在 Atcoder 王国中,使用 NN 种面额的硬币,分别为 A1A_1 元、A2A_2 元、\ldotsANA_N 元。
其中 1=A1<<AN1 = A_1 < \ldots < A_N,并且对于所有 1iN11 \leq i \leq N-1Ai+1A_{i+1} 都是 AiA_i 的倍数。

现在你需要用这些硬币支付 XX 元。你可以支付超过 XX 元,然后用硬币找零。请问,支付时所用硬币枚数与找零时所用硬币枚数之和的最小值是多少?

更准确地说,对于任意 YXY \geq X,你需要用最少的硬币表示 YY 元和 YXY-X 元,求这两者所用硬币数之和的最小值。

输入格式

输入通过标准输入给出,格式如下:

NN XX A1A_1 \ldots ANA_N

输出格式

输出答案。

输入输出样例 #1

输入 #1

3 87
1 10 100

输出 #1

5

输入输出样例 #2

输入 #2

2 49
1 7

输出 #2

7

输入输出样例 #3

输入 #3

10 123456789012345678
1 100 10000 1000000 100000000 10000000000 1000000000000 100000000000000 10000000000000000 1000000000000000000

输出 #3

233

说明/提示

限制条件

  • 输入中的所有值均为整数。
  • 1N601 \leq N \leq 60
  • 1=A1<<AN10181 = A_1 < \ldots < A_N \leq 10^{18}
  • 对于所有 1iN11 \leq i \leq N-1Ai+1A_{i+1}AiA_i 的倍数。
  • 1X10181 \leq X \leq 10^{18}

样例解释 1

11100100 元硬币支付,然后用 111010 元硬币和 3311 元硬币找零,总共需要 55 枚硬币。

样例解释 2

直接用 7777 元硬币支付是最优的。

由 ChatGPT 4.1 翻译