P14125 [SCCPC 2021] Monster Hunter

题目描述

Ema 是游戏中最强的“carry”玩家。在游戏里,她需要消灭 $m$ 个怪物。第 $i$ 个怪物初始有 $h_i$ 点生命值(HP)。每当 Ema 攻击一个怪物时,该怪物的生命值会减少她的攻击力。当怪物的生命值小于等于 $0$ 时,该怪物就会被消灭。 为了让游戏更加有趣,Ema 的攻击力不是一个固定值。她有一个基础攻击力序列 $a_1, a_2, \cdots, a_n$,伤害值是不断重复该序列获得的。形式化地,设第 $i$ 次攻击造成的伤害为 $r_i$,则有 $$ r_{i}= \left \{ \begin{array}{ll} a_i & 1 \leq i \leq n \\ r_{i - n} & i > n \end{array} \right. $$ 为了尽快消灭怪物,Ema 想要攻击次数尽量少。你能帮助她计算消灭所有怪物所需的最少攻击次数吗?

输入格式

有多组测试数据。输入的第一行为一个整数 $T$,表示测试组数。对于每组测试数据: 第一行包含一个整数 $n$($1 \leq n \leq 10^5$),表示基础攻击力序列的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$($1 \leq a_i \leq 3$),表示基础攻击力序列。 第三行包含一个整数 $m$($1 \leq m \leq 10^5$),表示怪物的数量。 第四行包含 $m$ 个整数 $h_1, h_2, \cdots, h_m$($1 \leq h_i \leq 10^9$),其中 $h_i$ 表示第 $i$ 个怪物的初始生命值。 保证所有测试用例中 $n$ 的和及 $m$ 的和均不超过 $10^5$。

输出格式

对于每组测试数据,输出一行一个整数,表示消灭所有怪物所需的最少攻击次数。

说明/提示

对于第一个样例,伤害序列为 $3, 2, 3, 2, 3, 2, \cdots$。可以按顺序依次攻击怪物 $1$、$2$、$3$、$2$,就可以消灭所有 $3$ 个怪物。 对于第二个样例,可以依次攻击怪物 $2$、$2$、$1$。 由 ChatGPT 5 翻译