[BOJ/C+]#1697鬼ごっこ
https://www.acmicpc.net/problem/13549
#1697かくれんぼの問題に似ています.
しかし瞬間移動の場合は0秒後、
3種類ともキューに押し込む過程で,時間が同じものが同時にpopに入ると,時間は少ない順に現れる.
利用
timeがそのままpushの瞬間移動は
注意:https://velog.io/@choiiis/C-STL-deque%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%95%EB%A6%AC
問題を解く
#1697かくれんぼの問題に似ています.
しかし瞬間移動の場合は0秒後、
3種類ともキューに押し込む過程で,時間が同じものが同時にpopに入ると,時間は少ない順に現れる.
利用
deque
time+1でプッシュされる一般的な移動はdeque.push_back
である.timeがそのままpushの瞬間移動は
deque.push_front
、手前pushがハイライトコード#コード#
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define MAX 100000
bool visited[MAX+1];
int N,K;
int bfs(int time, int pos){
deque<pair<int,int>> dq;
visited[pos]=true;
dq.push_back({time,pos});
while(!dq.empty()){
int curTime=dq.front().first;
int curPos=dq.front().second;
dq.pop_front();
if(curPos==K) return curTime;
//2*x
if(2*curPos<=MAX&&!visited[2*curPos]){
visited[2*curPos]= true;
dq.push_front({curTime,2*curPos}); // 이동거리 (time)이 0이므로 front에 넣어줘야함@@
}
//x-1
if(curPos>=1&&!visited[curPos-1]){
visited[curPos-1]=true;
dq.push_back({curTime+1,curPos-1});
}
//x+1
if(curPos<=MAX-1&&!visited[curPos+1]){
visited[curPos+1]= true;
dq.push_back({curTime+1,curPos+1});
}
}
}
int main(){
cin>>N>>K;
cout<<bfs(0, N)<<"\n";
return 0;
}
c++で初めて使うdeque
はやっぱり便利~!~注意:https://velog.io/@choiiis/C-STL-deque%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%95%EB%A6%AC
Reference
この問題について([BOJ/C+]#1697鬼ごっこ), 我々は、より多くの情報をここで見つけました https://velog.io/@inryu/BOJ-C-1697-숨바꼭질-q48zn6o4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol