白駿アルゴリズム1697号:鬼ごっこ
7562 ワード
リンク
https://www.acmicpc.net/problem/1697
質問する
秀斌は弟と隠れん坊をしている.秀彬は現在点N(0≦N≦100000)、弟は点K(0≦K≦100000)にいる.スビンは歩いたり瞬時に移動したりすることができます秀彬の位置がXであれば、1秒後にX-1またはX+1に移動します.瞬間移動なら1秒後に2*Xの位置に移動します.
もし秀彬と弟の位置があれば、秀彬が弟を探す最も速い時間は数秒後であることを求めるプログラムを書きます.
入力
一行目はスビンのポジションNと弟のポジションKNとKは整数です.
しゅつりょく
秀彬が弟を探している一番速い時間を印刷します.
入力と出力の例、ヒント
プールコード(C++)
// 1697번 : 숨바꼭질(실버 1)
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
#include <cstring>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define MAX 100001
using namespace std;
int dist[MAX];
int n, k;
int main()
{
fastio;
cin >> n >> k;
memset(dist, -1, sizeof(dist)); // 모든 거리를 -1로 초기화 시킨다
queue<int> Q;
dist[n] = 0;
Q.push(n);
while (!Q.empty())
{
int cur = Q.front(); // 현재 큐에 있는 좌표
Q.pop();
for (int i : {cur + 1, cur - 1, 2 * cur})
{
if (i < 0 || i > MAX - 1)
{
continue;
}
if (dist[i] != -1)
continue;
dist[i] = dist[cur] + 1;
Q.push(i);
if (i == k)
break;
}
}
cout << dist[k];
return 0;
}
ふくガス
私は問題が何を求めるべきか、どのように解くべきかを理解したが、現在の位置では2を乗じた値を表現できなかったので、解くことができず、最後に理解を見た.
foreach文の文法が分からなかったので、この問題はできなかったので、後でやるつもりです.
Reference
この問題について(白駿アルゴリズム1697号:鬼ごっこ), 我々は、より多くの情報をここで見つけました https://velog.io/@inwooleeme/백준-알고리즘-1697번-숨바꼭질テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol