白駿5014号:リンク開始
開始リンク
白駿5014号:リンク開始
アイデア
これは簡単なbfs問題である.建物の範囲(1階からf階まで)を超えないように、レイヤーが1つも届いていないか、より短い時間で到着していない場合は、キューに入れてください.
コード#コード#
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
// max->f start->s destination->g
int f, s, g, u, d;
queue<int> q;
cin >> f >> s >> g >> u >> d;
int elev[f+1] = {};
elev[s] = 1;
q.push(s);
while (!q.empty()) {
int cur = q.front();
if (cur == g) {
break;
}
q.pop();
if (cur+u <= f && (elev[cur+u] == 0 || elev[cur+u] > elev[cur] + 1)) {
elev[cur+u] = elev[cur] + 1;
q.push(cur+u);
}
if (cur-d >= 1 && (elev[cur-d] == 0 || elev[cur-d] > elev[cur] + 1)) {
elev[cur-d] = elev[cur] + 1;
q.push(cur-d);
}
}
if (elev[g] == 0) {
cout << "use the stairs";
}
else {
cout << elev[g] - 1;
}
return 0;
}
おしゃべり
注意範囲.簡単な質問なので癒されます
Reference
この問題について(白駿5014号:リンク開始), 我々は、より多くの情報をここで見つけました
https://velog.io/@ks1ksi/백준-5014번-스타트링크
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
// max->f start->s destination->g
int f, s, g, u, d;
queue<int> q;
cin >> f >> s >> g >> u >> d;
int elev[f+1] = {};
elev[s] = 1;
q.push(s);
while (!q.empty()) {
int cur = q.front();
if (cur == g) {
break;
}
q.pop();
if (cur+u <= f && (elev[cur+u] == 0 || elev[cur+u] > elev[cur] + 1)) {
elev[cur+u] = elev[cur] + 1;
q.push(cur+u);
}
if (cur-d >= 1 && (elev[cur-d] == 0 || elev[cur-d] > elev[cur] + 1)) {
elev[cur-d] = elev[cur] + 1;
q.push(cur-d);
}
}
if (elev[g] == 0) {
cout << "use the stairs";
}
else {
cout << elev[g] - 1;
}
return 0;
}
Reference
この問題について(白駿5014号:リンク開始), 我々は、より多くの情報をここで見つけました https://velog.io/@ks1ksi/백준-5014번-스타트링크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol