由1变成2,按红蓝按钮皆可,所以特殊处理1;
从A变成a,从B变成b,只要是偶数就是蓝色按钮的逆操作。(底数为2的对数复杂度,步数最少)
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), b = sc.nextInt();
int A = sc.nextInt(), B = sc.nextInt();
StringBuilder button1 = new StringBuilder(""); //A变成a的按钮序列
while(A > 0 && A != a){
if(A%2 == 0){
button1.append('B');
A /= 2;
}else{
button1.append('R');
A--;
}
}
StringBuilder button2 = new StringBuilder(""); //B变成b的按钮序列
while(B > 0 && B != b){
if(B%2 == 0){
button2.append('B');
B /= 2;
}else{
button2.append('R');
B--;
}
}
if(button1.toString().equals(button2.toString())){
System.out.println(button1.length());
}else{
int n = button1.length();
int m = button2.length();
if((a == 1 || b == 1)&&button1.toString().substring(0, n - 1).equals(button2.toString().substring(0, m - 1))){
System.out.println(button1.length());
}
else System.out.println(-1);
}
}
}
京公网安备 11010502036488号