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;
	}



}