求出将1变成b的最少次数(不能变则输出-1)有两个操作。 1.将当前数字∗a 2.将当前数字循环右移一次(12345−>51234)
我们在看完题面之后,我们需要将数字1变成b。通过乘法或者循环右移,没有规律可言。注意到我们的数据范围(a,b)都是小于106。也就是我们把a变成大于min(106,b)之后这个状态是肯定没有用的。
状态只有106这么多,把两种操作看成是两条单向边。这样就变成了一个典型的最短路径问题。那么我们使用BFS(或者记忆化搜索)来解决。
小塔近来在练法术,纸上写着的整数能被法术改掉。
他掌握两类法术。第一类:把当前整数改写成原来的 f 倍。例如 f=3 时,555 会变成 1665;第二类:把当前整数做一次末位轮转,末位数字挪到最高位。例如 23456 经第二类法术后变成 62345,228 会变成 822。注意:当前数不足 10,或以 0 结尾时,第二类法术不能用。
纸上起初写着 1,小塔想把该数改成自己中意的那个 g。请给出最少要施展多少次法术;若怎样都变不成 g,输出 −1。
单行写入一对正整型值 f,g 2≤f,g<106
单行打印一个整型值,即最少施术次数;无解则打印 −1。
输入
2 23
输出
6
说明
其中一条合法序列是:1→2→4→8→16→32→23
输入
2 17
输出
-1
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册