白俊12851号:鬼ごっこ2
かくれんぼをする
白俊12851号:鬼ごっこ2
アイデア
これはかくれんぼをする題を少し応用した問題です.最速時間内に見つかった場合は、数を見つけます.キューを入れる条件を変更しました.
本来、次の場所に格納されている値が0の場合(アクセスしたことがない)、キューに格納されます.この問題では、次の場所に格納されている値が現在の場所に格納されている値よりも大きくても、(これは、その位置に到達するのに要する時間が同じであることを意味します.次の位置に格納される値が現在の位置に格納される値よりも小さい場合、より効果的な方法でその位置に到達することができます.)キューに入れました.import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
pos = [0] * 100001
def solve(start, end):
q = deque()
q.append(start)
while q:
x = q.popleft()
if x == K:
print(pos[x])
break
if x - 1 >= 0 and (pos[x - 1] == 0 or pos[x - 1] > pos[x]):
pos[x - 1] = pos[x] + 1
q.append(x - 1)
if x + 1 <= 100000 and (pos[x + 1] == 0 or pos[x + 1] > pos[x]):
pos[x + 1] = pos[x] + 1
q.append(x + 1)
if x * 2 <= 100000 and (pos[x * 2] == 0 or pos[x * 2] > pos[x]):
pos[x * 2] = pos[x] + 1
q.append(x * 2)
ans = 1
while q:
x = q.popleft()
if x == K:
ans += 1
print(ans)
solve(N, K)
おしゃべり
私たちは隠れん坊を全部解かなければならない.
Reference
この問題について(白俊12851号:鬼ごっこ2), 我々は、より多くの情報をここで見つけました
https://velog.io/@ks1ksi/백준-12851번-숨바꼭질-2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
pos = [0] * 100001
def solve(start, end):
q = deque()
q.append(start)
while q:
x = q.popleft()
if x == K:
print(pos[x])
break
if x - 1 >= 0 and (pos[x - 1] == 0 or pos[x - 1] > pos[x]):
pos[x - 1] = pos[x] + 1
q.append(x - 1)
if x + 1 <= 100000 and (pos[x + 1] == 0 or pos[x + 1] > pos[x]):
pos[x + 1] = pos[x] + 1
q.append(x + 1)
if x * 2 <= 100000 and (pos[x * 2] == 0 or pos[x * 2] > pos[x]):
pos[x * 2] = pos[x] + 1
q.append(x * 2)
ans = 1
while q:
x = q.popleft()
if x == K:
ans += 1
print(ans)
solve(N, K)
Reference
この問題について(白俊12851号:鬼ごっこ2), 我々は、より多くの情報をここで見つけました https://velog.io/@ks1ksi/백준-12851번-숨바꼭질-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol