QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 1024 MB مجموع النقاط: 100

#13910. 密码

الإحصائيات

神偷路邦四世(通常简称为路邦)接下了一项艰巨的任务:潜入世界上最大、最雄伟、技术最先进的城堡——卡里奥斯特罗城堡(The Castle of Gagliostro)的金库。城堡配备了最先进的技术,不言而喻,它拥有充分利用了人力和机器能力的顶级安保。然而,即使面对这样的挑战,路邦也毫不畏惧。他悄无声息地避开了城堡周围的守卫和监控摄像头,突破了无数陷阱,解开了许多谜题,最终抵达了金库。在那里,他黑入了监控摄像头,使其显示完全没有异常的画面,并用药物迷晕了所有保安。

挡在他面前的最后一个障碍是一个电子密码系统,只有输入正确的密码才能打开金库。最初,屏幕上显示了 $N$ 个介于 $0$ 到 $K$ 之间(含 $0$ 和 $K$)的非负整数,其中第 $i$ 个等于 $A_i$。密码也由 $N$ 个数字组成,每个数字同样是介于 $0$ 到 $K$ 之间(含 $0$ 和 $K$)的非负整数。凭借他过人的智慧和身手,路邦确定了密码中的第 $i$ 个数字对于每个 $1 \le i \le N$ 都是 $P_i$。在弄清楚密码后,路邦欣喜若狂,准备完成他的任务。然而,令他沮丧的是,输入密码的方式相当奇特且非常耗时,需要通过一些操作来缓慢但确实地改变屏幕上显示的数字。

假设当前屏幕上显示的第 $i$ 个数字是 $C_i$($1 \le i \le N$)。当对于所有 $1 \le i \le N$,都有 $C_i = P_i$ 时,路邦就可以打开金库。否则,路邦可以进行以下形式的操作:选择两个整数 $i, j$,满足 $1 \le i \le j \le N$,对于所有满足 $i \le l \le j$ 的整数 $l$,将 $C_l$ 变为 $(C_l + 1) \bmod (K + 1)$。换句话说,将 $C_l$ 替换为 $C_l + 1$ 除以 $K + 1$ 的余数。具体来说,$0$ 变为 $1$,$1$ 变为 $2$,……,$K - 1$ 变为 $K$,$K$ 变为 $0$。

仿佛这糟糕的密码输入系统还不够让人头疼,路邦还收到消息,他的宿敌钱形警官(Inspector Zenigada)正赶来将他一网打尽。为了尽快侵入金库并逃脱,路邦希望使用最少的操作次数将初始数字修改为密码并打开金库。你的任务是确定路邦所需的最少操作次数。

输入格式

输入第一行包含两个整数 $N$ 和 $K$。

第二行包含 $N$ 个整数 $A_1, A_2, \dots, A_N$,其中 $A_i$ 是屏幕上最初显示的第 $i$ 个数字。

第三行也是最后一行包含 $N$ 个整数 $P_1, P_2, \dots, P_N$,其中 $P_j$ 是密码中的第 $j$ 个数字。

输出格式

输出应在单行中包含一个整数,表示路邦将屏幕上的数字修改为密码所需的最少操作次数。

实现细节

由于某些子任务的输入长度可能非常大,建议使用带有快速输入例程的 C++ 来解决此问题。科学委员会没有使用 Java 或 Python 编写的能够完全解决此问题的程序。

附件中提供了包含快速输入/输出模板的 C++ 和 Java 源文件。强烈建议您使用这些模板。

如果您使用 Java 实现解决方案,请将文件命名为 Password.java,并将主函数放在 Password 类中。

子任务

每个测试点的最大运行时间为 1.0s,最大内存使用量为 1GiB。

对于所有测试用例,输入将满足以下范围:

  • $1 \le N \le 3 \times 10^5$
  • $0 \le K \le 10^9$
  • $0 \le A[i], P[i] \le K$ 对于所有 $1 \le i \le N$

您的程序将在满足以下限制的输入实例上进行测试:

子任务 分值 附加限制
1 6 $N \le 3$
2 5 对于所有 $1 \le i \le N - 1$,$A_i \le A_{i+1}$ 且 对于所有 $1 \le i \le N$,$P_i = 0$
3 9 $K \le 1$
4 10 $N, K \le 80$
5 13 $N \le 400$
6 23 $N \le 3000$
7 34 无附加限制

样例

输入样例 1

3 4
1 2 0
2 1 2

输出样例 1

4

说明 1

一种最优的操作序列是:选择 $(i, j) = (1, 3)$ 一次,$(2, 3)$ 一次,以及 $(2, 2)$ 两次。

输入样例 2

7 1
1 0 1 0 1 1 1
0 0 1 1 0 1 0

输出样例 2

3

说明 2

一种最优的操作序列是:选择 $(i, j) = (1, 3)$ 一次,$(2, 6)$ 一次,以及 $(6, 7)$ 一次。

输入样例 3

7 9
1 5 3 4 8 3 2
7 4 8 3 2 3 1

输出样例 3

18

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.