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 。 ![](https://cdn.luogu.com.cn/upload/image_hosting/qsneyhxk.png) 则左旋后当前数位上所显示的数为 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\}$ 。 范围暂定,有待商榷。