U238552 [ljoi2077]密码锁
题目描述
小 M 有一个密码锁,上面有 $N$ 位,分别编号为 $1,2,3,...,N$ ,每一位共有 $M$ 个数,分别是 $0,1,2,...,M-1$ ,呈环状排列。初始状态下,每个数位上会有一个显示的数 $a_i$ ,则从 $a_i$ 开始,该数位的环为 $a_i,a_i+1,...,M-1,0,1,2,...,a_i-1$ 。(下有图辅助理解)
小 M 每次可以进行一次 **旋转**$(rotate)$ 操作,即任意选择两个正整数 $l,r(1\le l\lt r\le n)$ ,并左旋/右旋在 $[l,r]$ 区间内的每一个数位一位。
如图所示,为密码锁的一个数位的一个俯视图,其满足初始状态显示的数为 114 。

则左旋后当前数位上所显示的数为 115 ,右旋后当前数位上显示的数变为 113 。
不幸的是,由于这个密码锁上有很多位,它真的**很大**,以致于小 M 每进行一次操作都需要耗费 1 点体力。
现在,给出小 $M$ 的密码锁现在的状态和密码锁的密码(目标状态),求小 M 想要开锁所消耗的最小体力。
**形式化题意:**
给定一个数组 $\{a_i\}$ ,定义一次操作为任选两个正整数 $l,r(1\le l \lt r \le n)$ 并选定 $p=1$ 或 $-1$ ,对于 $[l,r]$ 内的每一个正整数 $k$ 使 $a_k$ 变为 $(a_k+m+p) \bmod m$ 。给定初始数组与目标数组,求初始数组变为目标数组所需要的最小操作数。
输入格式
第一行,有 $2$ 个整数,分别为 $N,M$ ,意义见题目描述。
第二行,有 $N$ 个整数,表示密码锁的初始状态。
第三行,有 $N$ 个整数,表示密码。
输出格式
仅有一行,为一个整数,表示最少消耗的体力。
说明/提示
【样例解释】
对于第一组样例,第一次可以将密码锁的 2 位一起右旋一位,变成 $\{1,2\}$ 。第二次可以将密码锁的第 2 位右旋一位,变成 $\{1,0\}$ 。
范围暂定,有待商榷。