#arc0183. [arc018_3]席替え

[arc018_3]席替え

问题描述

我的学校每个班级的人数都非常多,有些班级甚至达到了1000000人。
我的班级也不例外。教室里摆放着 NNMM 列的长方形桌子,共有 N×MN \times M 名学生,每个学生都有自己的座位。
我们学校非常重视防灾意识,因此教室的后墙被设计成可以拆卸,以便在紧急情况下人们可以通过那里逃生。
这次制定了一个政策,即在避难时应让成绩好的人先逃生。因此,在我们班级里,我们决定让成绩好的人坐得离教室后墙更近。具体来说,我们将进行座位调整,使得第 ii 行第 jj 列的座位 (i,j)(i, j) 上的学生的成绩记为 G[i][j]G[i][j]。对于座位 (a,b)(a, b)(c,d)(c, d),如果 a>ca > c,则不管 bbdd 的值如何,总是要满足 G[a][b]G[c][d]G[a][b] \geq G[c][d]
学生可以移动到任意的座位,但不能出现两个以上的人坐在同一个座位上,也不能存在没有人坐的座位。当然,我们不能增加或减少桌子,以保持原有的 NNMM 列的形状不变。
尽管进行座位调整是好的,但由于人数非常多,我们希望尽量减少每个学生移动的总距离。这里所说的学生的总移动距离是指他们座位变动前后位置的曼哈顿距离,即从座位 (a,b)(a, b) 移动到座位 (c,d)(c, d) 的距离是 ac+bd|a - c| + |b - d|
给定座位调整前每个座位上学生的成绩,求学生的总移动距离的最小值。


输入

输入数据从标准输入读取,具体格式如下所示。

NN MM x0x_0 a a pp

  • 第1行包含两个整数 NNMM,表示教室的行数和列数 (1N,M10001 \leq N, M \leq 1000)。
  • 第2行包含三个整数 x0x_0aapp,用空格分隔开,表示生成学生成绩数据的随机数种子 (0x01090 \leq x_0 \leq 10^9),随机数增量 aa (0a1090 \leq a \leq 10^9) 和素数 pp (N×Mp109N \times M \leq p \leq 10^9)。由于座位数目非常多,我们将使用上述三个变量生成每个座位上学生的成绩。对于 i1i \geq 1,考虑数列 xx,它由递归式 xi=(xi1+a)modpx_i = (x_{i-1} + a) \mod p 给出。假设座位 (i,j)(i, j) 上坐着学生的成绩为 xi×m+jx_{i \times m + j}

输出

请输出座位调整后学生的总移动距离的最小值。


输入示例1


2 3
1 2 59

输出示例1


0
```座位调整前每个座位上学生的成绩如下所示。

```plain

1  3  5
7  9 11
```每个座位都满足条件:在它之后(在这里是向下方向)没有比自己成绩更差的人,因此不需要进行座位调整。

* * *

### 输入示例2

```plain

2 3
6 55 59

输出示例2


2
```座位调整前每个座位上学生的成绩如下所示。

```plain

 6  2 57
53 49 45```我们只需要交换座位 $(0, 2)$ 和 $(1, 2)$ 即可。考虑到两者的数值变化的绝对值都是 $1$,因此总移动距离是 $2$。

* * *

### 输入示例3

```plain

4 5
15 25 79

输出示例3


26
```座位调整前每个座位上学生的成绩如下所示。

```plain

15 40 65 11 36
61  7 32 57  3
28 53 78 24 49
74 20 45 70 16
```以下是满足条件的座位调整示例之一。

```plain

15  7 16 11  3
28 20 32 24 36
53 40 45 57 49
74 61 65 70 78