QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 512 MB Puntuación total: 100

#11128. 故障的组合锁

Estadísticas

你是一名全职拆弹专家。你的职责包括保持通话,并不让任何人被炸飞。

这一次,你在拆除炸弹前遇到了最后的障碍——一个密码锁。该锁包含 $n$ 个旋转圆盘,每个圆盘上按递增顺序包含 $0$ 到 $m-1$ 之间的所有整数。圆盘向前旋转一次会使上面的数字增加 $1$(当数字为 $m-1$ 时,它会变为 $0$)。同样,圆盘向后旋转一次会使上面的数字减少 $1$(当数字为 $0$ 时,它会变为 $m-1$)。

你看到了锁的初始状态,并且完全知道打开锁的密码组合。不幸的是,这个锁有故障。每当你向前或向后旋转第 $i$ 个圆盘时,第 $i+1$ 个圆盘也会随之向相同方向旋转。同样,每当你旋转第 $n$ 个圆盘时,第一个圆盘也会随之向相同方向旋转。

一方面,这可能有助于你更快地打开锁;另一方面,这可能导致你根本无法打开锁;谁知道呢?好吧,当然是你。请找出打开锁所需执行的最少圆盘旋转次数,或者确定这是不可能的(然后有人就要被炸飞了)。

输入格式

第一行包含两个整数 $n$ 和 $m$ ($2 \le n \le 2 \cdot 10^5; 2 \le m \le 10^9$),分别表示锁中圆盘的数量和圆盘上数字的范围。第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$ ($0 \le a_i < m$),表示第 $1, 2, \dots, n$ 个圆盘上的初始数字。第三行包含 $n$ 个整数 $b_1, b_2, \dots, b_n$ ($0 \le b_i < m$),表示第 $1, 2, \dots, n$ 个圆盘上的目标数字。

输出格式

如果无法打开锁,输出 $-1$。否则,输出一个整数,表示打开锁所需执行的最少圆盘旋转次数。

样例

样例输入 1

6 3
0 1 0 1 0 1
1 0 1 0 1 0

样例输出 1

4

样例输入 2

3 7
4 2 1
1 2 5

样例输出 2

3

样例输入 3

2 10
7 7
3 5

样例输出 3

-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.