[伯俊]13549号鬼ごっこ3


質問リンク


https://www.acmicpc.net/problem/13549

問題の説明

  • n~kの最小時間出力
  • 現在の座標がxの場合
  • x+1,x-1,毎秒
  • 2*x、0秒
  • に答える

  • 2*xに移動する時間は0であるため、座標は
  • に優先的に移動しなければならない.
    座標系
  • 2*xをキューに追加すると、その座標系は
  • を優先的に参照する.

    に感銘を与える


  • 最初は何とか再帰的に、深く優先的に探索したり、DPで計算したりしたが、思い出せなかった.

  • ブラウズが必要な値は優先順位があるため、幅優先ブラウズが必要です

  • その後も関数を確立してみて、距離がゼロの座標を優先してすべてキューに入れてから、もう一つの座標を置く方法でインデックスが間違っていました.
  • の距離順に失敗
  • を入れる.

    コード#コード#

    from collections import deque
    
    
    def bfs():
        dist = [float('inf')] * 200000
        dist[n] = 0
        q = deque([n])
        while q:
            cn = q.popleft()
            if cn == k:
                return dist[cn]
            for i in range(3):
                nn = get_nn(cn, i)
                if not (0 <= nn < len(dist)):
                    continue
                if dist[nn] != float('inf'):
                    continue
                if i == 0:
                    dist[nn] = dist[cn]
                    q.appendleft(nn)
                else:
                    dist[nn] = dist[cn] + 1
                    q.append(nn)
    
    
    def get_nn(cn, i):
        if i == 0:
            return cn * 2
        if i == 1:
            return cn + 1
        return cn - 1
    
    
    n, k = map(int, input().split())
    print(bfs())