3 条题解
-
2
这个题我用的方法是bfs
其实是个模板题。对于每一个数我们可能有的操作是3种
- 我们可以加 1
- 我们可以减 1
- 我们可以给这个数平方
因为我们的操作步数可以看作每个权值都是1,所以直接套bfs的模板就好了,对于每个数分别枚举三个方向,然后将符合范围的结果加入队列。
代码实现
n, m = map(int, input().split(' ')) d = [0 for i in range(2005)] q = [n] while len(q) > 0: x = q[0] + 1 if x <= 2000 and d[x] == 0: d[x] = d[q[0]] + 1 q.append(x) x = q[0] - 1 if x >= 1 and d[x] == 0 : d[x] = d[q[0]] + 1 q.append(x) x = q[0] * q[0] if x <= 2000 and d[x] == 0: d[x] = d[q[0]] + 1 q.append(x) q.pop(0) print(d[m])
小想法
其实加入这个数是小的,那么只有减法操作可以到达了,就直接输出差就好了。
信息
- ID
- 20971
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 124
- 已通过
- 11
- 上传者