QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 512 MB Points totaux : 100

#12636. 这意味着战争

Statistiques

一支军队即将开战,他们希望将所有士兵分成若干个小组,以使他们的总实力最大化。假设有 $N$ 名士兵站在二维平面上,所有士兵都站在 $x$ 轴上不同的位置,第 $i$ 名士兵站在 $x$ 轴上的 $x_i$ 处(士兵按从左到右的顺序编号为 $1$ 到 $N$)。你需要将士兵按 $x$ 坐标排序后的顺序(从左到右)分成若干个小组。

你的任务是将他们分成一个或多个小组,每个士兵恰好属于一个小组,且任何小组的所有成员在位置上都是相邻的,中间没有其他小组的成员。因此,每个小组将由两个整数 $a$ 和 $b$(其中 $a \le b$)定义,这意味着该小组包括从第 $a$ 名士兵到第 $b$ 名士兵(包含两端)。

每名士兵都会被赋予一个函数 $f_i$,用于评估小组的实力(仅当该士兵是小组中最左侧的士兵时使用)。对于每个函数 $f_i$,你将获得 $M$ 个不同的值 $z_j$(编号为 $1$ 到 $M$),这些值将用于评估所有函数。对于每个函数 $f_i$,你将获得 $f_i(z_j)$ 的值。为了得到除给定的 $M$ 个点之外的任何 $z$ 的值,你只需将 $(z_j, f_i(z_j))$ 视为一个点,并使用线段连接每两个相邻的点,现在你就拥有了一个覆盖从 $z_1$ 到 $z_M$ 所有可能值的函数。

整支军队的实力是每个小组实力之和。一个从第 $a$ 名士兵到第 $b$ 名士兵的小组,其强度为 $f_a(x_b)$,换句话说,它是当我们将最右侧士兵的 $x$ 坐标代入最左侧士兵的函数时,该函数的值。请查看文末的说明以获取关于第一个测试用例的更多解释。

给定上述所有必要细节,你的任务是将士兵分成若干小组,以使整支军队的总实力最大化。

输入格式

你的程序将在一个或多个测试用例上进行测试。输入的第一行是一个整数 $T$ ($1 \le T \le 100$),表示测试用例的数量。接下来是 $T$ 个测试用例。

每个测试用例的第一行包含两个空格分隔的整数 $N$ ($1 \le N \le 10^5$) 和 $M$ ($2 \le M, N \times M \le 10^5$),分别表示士兵的数量和 $z$ 值的数量。

接下来一行包含 $N$ 个排序后的整数,表示士兵的位置 $x_1, x_2, \dots, x_N$ ($-10^6 \le x_i \le 10^6$)。

接下来一行包含 $M$ 个排序后的整数,表示如上所述的 $z$ 值 $z_1, z_2, \dots, z_M$ ($-10^6 \le z_j \le 10^6$)。

接下来 $N$ 行,每行包含 $M$ 个空格分隔的整数。第 $i$ 行从左往右的第 $j$ 个值是 $f_i(z_j)$ ($-10^6 \le f_i(z_j) \le 10^6$)。

保证 $z_1 \le x_1$ 且 $x_N \le z_M$。

输出格式

对于每个测试用例,打印一行,包含一个保留 6 位小数的十进制数,即你能得到的军队总实力的最大值。

样例

输入 1

3
3 4
-5 2 3
-6 1 4 5
-1 3 6 0
2 -2 -4 -6
-4 0 4 5
5 2
-2 5 8 9 10
-2 10
-7 -6
-3 -7
0 -8
9 -10
5 -4
2 2
0 7
-2 7
-10 -2
-4 -10

输出 1

6.666667
-6.000000
-2.000000

说明

下图展示了第一个测试用例:

$x$ 轴上的 3 个实心圆圈是 3 名士兵的位置,我们有如上所述绘制的 3 个函数 $f_1, f_2$ 和 $f_3$(每名士兵一个)。这里的最佳方案是将前 2 名士兵放在一组,该小组的实力将是 $f_1(x_2)$,即 $f_1(2) = 4$,最后一名士兵单独一组,该小组的实力将是 $f_3(x_3)$,即 $f_3(3) = 2.666667$,因此总实力为 $6.666667$(全部四舍五入到 6 位小数)。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.