CF2027D1.The Endspeaker (Easy Version)
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的简单版本。唯一的区别在于,在本版本中你只需要输出操作的最小总代价。你必须同时完成两个版本才能进行 hack。
给定一个长度为 n 的数组 a,以及一个长度为 m 的数组 b(满足对于所有 1≤i<m,都有 bi>bi+1)。初始时,k 的值为 1。你的目标是通过重复执行以下两种操作之一,使数组 a 变为空:
- 类型 1 —— 如果 k 的值小于 m 且数组 a 非空,你可以将 k 的值加 1。此操作不产生任何代价。
- 类型 2 —— 你可以移除数组 a 的一个非空前缀,前提是该前缀的元素和不超过 bk。此操作的代价为 m−k。
你需要最小化将数组 a 变为空所需操作的总代价。如果无法通过任何操作序列将 a 变为空,则输出 −1。否则,输出操作的最小总代价。
输入格式
每个测试包含多组测试用例。第一行包含测试用例数 t(1≤t≤1000)。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 m(1≤n,m≤3⋅105,1≤n⋅m≤3⋅105)。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109)。
第三行包含 m 个整数 b1,b2,…,bm(1≤bi≤109)。
保证对于所有 1≤i<m,都有 bi>bi+1。
保证所有测试用例中 n⋅m 的总和不超过 3⋅105。
输出格式
对于每个测试用例,如果可以将 a 变为空,则输出操作的最小总代价。
如果不存在任何可以将 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 -1 2 10 4
说明/提示
在第一个测试用例中,一种总代价为 1 的最优操作序列如下:
- 执行一次类型 2 操作。选择前缀为 [9]。此操作代价为 1。
- 执行一次类型 1 操作。此时 k 变为 2。此操作无代价。
- 执行一次类型 2 操作。选择前缀为 [3,4]。此操作代价为 0。
- 执行一次类型 2 操作。选择前缀为 [3]。此操作代价为 0。
- 此时数组 a 已为空,所有操作的总代价为 1。
在第二个测试用例中,无法移除任何前缀,因为 a1>b1,因此无法通过任何操作序列将数组 a 变为空。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?