QOJ.ac

QOJ

Time Limit: 4 s Memory Limit: 1024 MB Total points: 10 Difficulty: [show] Hackable ✓

#8414. 高速公路 2 [A]

Statistics

Bajtocja 和 Bitocja 在经历了多年毫无意义的战争后,终于签署了和平条约。为了象征最终的和平,两国首都之间修建了一条高速公路。你被任命为从 Bajtocja 通往 Bitocja 方向的高速公路路段的管理者。

目前高速公路上有 $m$ 个收费站,依次编号为 $1$ 到 $m$。第一个收费站位于高速公路起点,最后一个位于终点。通过某个收费站的费用在一天中的不同时间可能有所不同。一天被分为 $n$ 个小时,编号为 $1$ 到 $n$。目前,在 $i$ 时刻通过 $j$ 号收费站的费用为 $c_{i,j}$ Bajtalar。其中一些费用可能为 $0$(此时通过收费站免费),甚至为负数(此时司机通过收费站可获得 $-c_{i,j}$ Bajtalar)。

整条高速公路很短,可以在一小时内跑完全程。当然,司机不必如此匆忙——在行驶过程中可以进行任意多次停留。但不能在高速公路上过夜;必须在同一天内通过所有收费站。

显然,司机希望以尽可能低的成本通过高速公路。对于 $1 \le i \le j \le n$,我们用 $f(i, j)$ 表示如果司机在 $i$ 时刻通过第一个收费站,并在 $j$ 时刻通过最后一个收费站时,通过整条高速公路的最小可能成本。所有 $f(i, j)$ 的值均已由两国政府在和平条约中确定,因此作为高速公路管理者,你不能更改它们。然而,你可以随意修改各个收费站的通行费价格,甚至可以完全关闭部分收费站,前提是第一个和最后一个收费站必须保持开放,且 $f(i, j)$ 的值保持不变,并且你设定的所有费用必须是 $1$ Bajtalar 的整数倍。

为了最大限度地降低高速公路的维护成本,你希望关闭尽可能多的收费站。请确定为了继续满足条约条件,必须保持开放的收费站的最小数量。

收费站收费方案的重组项目将分为两个阶段。在第一阶段(初步设计)中,你只需要找到最优的收费站数量。但在第二阶段(项目实施阶段),你还必须为保留下来的收费站提供一份完整的示例价目表。

输入格式

输入的第一行包含三个整数 $n, m$ 和 $q$ ($2 \le n, m \le 30\,000$; $n \cdot m \le 300\,000$; $q \in \{0, 1\}$),分别表示一天中的小时数、当前高速公路上的收费站数量以及描述项目阶段的位。$q = 0$ 表示项目的第一阶段(初步设计),而 $q = 1$ 表示项目已进入实施阶段。

接下来的 $n$ 行包含当前费用的描述;第 $i$ 行包含 $m$ 个整数 $c_{i,1}, c_{i,2}, \dots, c_{i,m}$ ($-10^6 \le c_{i,j} \le 10^6$)。$c_{i,j}$ 的值表示在 $i$ 时刻通过 $j$ 号收费站的费用,单位为 Bajtalar。如果 $c_{i,j}$ 为负,则表示司机通过 $j$ 号收费站时可获得 $-c_{i,j}$ Bajtalar。

输出格式

第一行应包含一个整数 $k$ ($2 \le k \le m$),表示为了使任何 $f(i, j)$ 的值都不发生变化,必须保留在高速公路上的最小收费站数量。如果 $q = 0$,输出应仅包含这一行,其中仅包含该数字。

如果 $q = 1$,接下来的 $n$ 行应包含满足题目条件的示例最优收费价目表。在这些行中的第 $i$ 行,应包含 $k$ 个整数 $d_{i,1}, d_{i,2}, \dots, d_{i,k}$ ($-10^{12} \le d_{i,j} \le 10^{12}$)。$d_{i,j}$ 的值表示在 $i$ 时刻通过保留下来的第 $j$ 个收费站的新费用。

可以证明,对于题目中的限制条件,总是可以确定绝对值不超过 $10^{12}$ 的整数费用。

样例

输入 1

3 6 1
-1 0 4 0 -3 0
-4 1 5 2 -5 2
-5 2 3 0 -2 2

输出 1

3
0 0 0
0 1 0
0 0 0

说明 1

在第一个测试样例中,通过高速公路的各个最小成本如下: $f(1, 1) = (-1) + 0 + 4 + 0 + (-3) + 0 = 0$, $f(1, 2) = (-1) + 0 + 4 + 0 + (-5) + 2 = 0$, $f(1, 3) = (-1) + 0 + 4 + 0 + (-5) + 2 = 0$, $f(2, 2) = (-4) + 1 + 5 + 2 + (-5) + 2 = 1$, $f(2, 3) = (-4) + 1 + 3 + 0 + (-2) + 2 = 0$, $f(3, 3) = (-5) + 2 + 3 + 0 + (-2) + 2 = 0$.

使用两个收费站无法实现相同的通行成本。请注意,第一个和最后一个收费站不能关闭,即使在建议的费用 $d_{i,j}$ 下,这些收费站不收取任何费用。

输入 2

5 7 0
0 0 0 8 0 0 0
0 7 6 5 9 7 0
0 0 0 5 9 6 0
9 4 0 4 4 7 0
0 0 0 9 8 6 0

输出 2

3

说明 2

在第二个测试样例中,输出不包含新价目表的建议,因为收费方案重组项目仅处于初步阶段。

子任务

  • 在分值为总分一半的测试中,满足条件 $q = 0$。
  • 在其余测试中,始终满足条件 $q = 1$。

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.