CF2027D2.The Endspeaker (Hard Version)
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是这道题目的困难版本。与简单版本的区别在于,你还需要输出达到最优解的操作序列数量。你需要解决这两种版本才能进行 hack。
现在给定一个数组 $ a $,长度为 $ n $,以及一个数组 $ b $,长度为 $ m $(保证 $ b_i > b_{i+1} $ 对所有 $ 1 \le i < m $ 成立)。初始时,$ k $ 的值为 $ 1 $。你的目标是通过执行以下两种操作之一反复将数组 $ a $ 变为空:
- 类型 $ 1 $ 操作 — 在 $ k < m $ 且数组 $ a $ 不为空时,你可以将 $ k $ 的值加 $ 1 $。这种操作不需要花费任何代价。
- 类型 $ 2 $ 操作 — 你可以移除数组 $ a $ 的一个非空前缀,使得这个前缀的和不大于 $ b_k $。这种操作的代价为 $ m - k $。
你需要让将数组 $ a $ 变为空的总操作代价最小化。如果无法通过任何操作序列达到这一目标,请输出 $ -1 $。否则,输出最小总操作代价以及产生命中该代价的操作序列数量,对 $ 10^9 + 7 $ 取模。
若两个操作序列在任一步骤中选择了不同种类的操作,或移除前缀的大小不同,则它们视为不同。
输入格式
每个测试用例包含多个测试,第一行为测试用例数量 $ t ( 1 \le t \le 1000 $)。接下来描述每个测试用例。
每个测试用例的第一行包含两个整数 $ n $ 和 $ m ( 1 \le n, m \le 3 \cdot 10^5 $,且 $ 1 \le n \cdot m \le 3 \cdot 10^5 $)。
每个测试用例的第二行包含长度为 $ n $ 的整数数组 $ a $,其中每个 $ a_i $ 满足 $ 1 \le a_i \le 10^9 $。
每个测试用例的第三行包含长度为 $ m $ 的整数数组 $ b , 1 \le b_i \le 10^9 $,并且满足 $ b_i > b_{i+1} $ 对所有 $ 1 \le i < m $。
保证所有测试用例的总 $ n \cdot m $ 不超过 $ 3 \cdot 10^5 $。
输出格式
对于每个测试用例,如果可以使数组 $ a $ 变为空,则输出两个整数:最小的操作总费用,以及达到该最小费用的操作序列数量,结果对 $ 10^9 + 7 $ 取模。
如果没有可能的操作序列能使数组 $ a $ 变为空,则输出单个整数 $ -1 $。
输入输出样例
输入#1
5 4 2 9 3 4 3 11 7 1 2 20 19 18 10 2 2 5 2 1 10 3 2 9 9 6 17 9 10 11 2 2 2 2 2 2 2 2 2 2 20 18 16 14 12 10 8 6 4 2 1 1 6 10 32 16 8 4 2 1
输出#1
1 3 -1 2 11 10 42 4 1
说明/提示
以下为一个测试用例的示例,其中最优操作序列的总费用为 $ 1 $,共有 $ 3 $ 种:
- 所有这 $ 3 $ 种序列都以类型 $ 2 $ 的操作开头,移除前缀 $ [9] $,使得 $ a = [3, 4, 3] $,产生代价 $ 1 $。然后执行类型 $ 1 $ 操作,把 $ k $ 提升一位,此后所有操作均无代价。
- 一种序列依次移除前缀 $ [3, 4] $ 和 $ [3] $。
- 另一种序列依次移除前缀 $ [3] $ 和 $ [4, 3] $。
- 还有一种序列依次移除前缀 $ [3] $,再移除 $ [4] $,最后移除 $ [3] $。
在第二个测试用例中,由于 $ a_1 > b_1 $,无法移除任何前缀,因此无论如何都无法使数组 $ a $ 变为空。
本翻译由 AI 自动生成
输入解题思路,AI测评打分。不知道怎么写?