3 条题解

  • 2
    @ 2022-10-28 0:50:18

    这个题我用的方法是bfs

    其实是个模板题。对于每一个数我们可能有的操作是3种

    1. 我们可以加 1
    2. 我们可以减 1
    3. 我们可以给这个数平方

    因为我们的操作步数可以看作每个权值都是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
    上传者