16953 A->B
質問リンク
コードの説明
10^9を超える演算が可能なので、long long変換が必要です(dfsに転送するときももちろんlong long変換を行います...ここでエラーが続きます)🤣)
dfsを使用してすべての演算を実行し、Bより大きい場合に戻ります.longlong変換はstollを使用する必要があります.使用したくない場合は
(*10+1)と一緒に演算するのもよさそうです.
bfsの使用はもちろんより速く見えるので,bfsでも再解する.
😊ソースコード
#include<iostream>
#include<string>
using namespace std;
long long A, B;
int result=1000000000;
bool flag;
void dfs(int level, long long A, long long B) {
if (A == B) {
if (result > level+1) {
result = level+1;
flag = true;
}
return;
}
else if(A>B){
flag = false;
return;
}
for (int i = 0; i < 2; i++) {
if (flag == true) return;
if (i == 0) {
dfs(level + 1, A*2, B);
}
else {
dfs(level + 1, stoll(to_string(A)+'1'), B);
}
}
}
int main() {
cin >> A >> B;
dfs(0,A, B);
if(flag==true) cout << result;
else {
cout << -1;
}
}
Reference
この問題について(16953 A->B), 我々は、より多くの情報をここで見つけました https://velog.io/@trevor522/16953번-A-Bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol