P16767 [GKS 2020 #F] ATM Queue

题目描述

有 $N$ 个人,编号为 $1$ 到 $N$,正排成一队从 ATM 机上取钱。队列按编号升序排列。编号为 $i$ 的人想要取出金额 $A_i$。每个人每次最多能取出 $X$ 元。如果他们需要的钱超过 $X$,就需要走到队尾重新排队等待下一次取款。一旦取够了所需金额,该人就会离开队列。 你需要找出所有人离开队列的顺序。

输入格式

输入的第一行给出测试用例的数量 $T$。接下来有 $T$ 个测试用例。 每个测试用例的第一行给出两个空格分隔的整数:队列中的人数 $N$ 以及一次操作最多能取出的金额 $X$。 下一行包含 $N$ 个空格分隔的整数 $A_i$。

输出格式

对于每个测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 是一个空格分隔的整数列表,表示所有人离开队列的顺序。

说明/提示

在样例 #1 中,有 $3$ 个人,一次最多取 $3$ 元。过程的逐步描述如下: - 初始队列为 $[1, 2, 3]$。第 $1$ 个人第一次取 $2$ 元,取够后离开队列。 - 此时队列变为 $[2, 3]$。第 $2$ 个人想取 $7$ 元,但第一次只能取 $3$ 元,还需 $4$ 元,因此他走到队尾重新排队。 - 队列变为 $[3, 2]$。第 $3$ 个人想取 $4$ 元,第一次只能取 $3$ 元,还需 $1$ 元,因此他走到队尾重新排队。 - 队列变为 $[2, 3]$。第 $2$ 个人仍需要 $4$ 元,第二次取 $3$ 元,还需 $1$ 元,等待下一次。 - 队列变为 $[3, 2]$。第 $3$ 个人取出剩余的 $1$ 元后离开队列。 - 队列变为 $[2]$。第 $2$ 个人取出剩余的 $1$ 元后离开队列。 - 队列为空。 离开顺序为 $[1, 3, 2]$。 在样例 #2 中,有 $5$ 个人,一次最多取 $6$ 元。过程的逐步描述如下: - 初始队列 $[1, 2, 3, 4, 5]$。第 $1$ 个人取 $6$ 元,还需 $3$ 元,走到队尾。 - 队列 $[2, 3, 4, 5, 1]$。第 $2$ 个人取 $6$ 元,还需 $4$ 元,走到队尾。 - 队列 $[3, 4, 5, 1, 2]$。第 $3$ 个人取 $4$ 元,取够后离开。 - 队列 $[4, 5, 1, 2]$。第 $4$ 个人取 $6$ 元,还需 $1$ 元,走到队尾。 - 队列 $[5, 1, 2, 4]$。第 $5$ 个人取 $2$ 元,取够后离开。 - 队列 $[1, 2, 4]$。剩余的人依次在第二次取款后离开。 离开顺序为 $[3, 5, 1, 2, 4]$。 ### 限制条件 $1 \le T \le 100$。 **测试集 1** $1 \le N \le 100$。 $1 \le A_i \le 100$。 $1 \le X \le 100$。 **测试集 2** 最多 $10$ 个测试用例满足 $1 \le N \le 10^5$。其余测试用例满足 $1 \le N \le 100$。 $1 \le A_i \le 10^9$。 $1 \le X \le 10^9$。 翻译由 DeepSeek V4 Pro 完成