ARC 001 B リモコン
はじめ通貨問題のように貪欲法で解いたところ撃沈。
通貨問題では、使うコインをa,b,cと昇順に並べたときbが
aの倍数、cがbの倍数であれば、貪欲法が使えるが、この問題では
プラス・マイナス両側から近づくので使えないらしい。
回答をみてBFSで実装しました。温度に対する操作回数を保存するのは嫌だったので(温度がマイナスになる可能性もあるので)、mapを使いました。初めてBFSでmapを使いましたが、相性はいいと思います。
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b;cin>>a>>b;
map<int,int>cnt;
cnt[a]=0;
queue<int>que;
que.push(a);
while(!que.empty()){
int x=que.front();que.pop();
if(x==b)cout<<cnt[x]<<endl,exit(0);
for(auto&& u:diff){
int y=x+u;
if(cnt.count(y)==0){
cnt[y]=cnt[x]+1;
que.push(y);
}
}
}
}