import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int[][] d = {{1,-1},{1,1},{2,0}}; static int[] step; static boolean[] vis; static final int MAX = 100005; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int m = in.nextInt(); int n = in.nextInt(); vis = new boolean[MAX]; step = new int[MAX]; System.out.println(bfs(m,n)); } } public static int bfs(int s, int e) { Queue q = new LinkedList(); q.add(s); vis[s] = true; step[s] = 0; while (!q.isEmpty()) { int t = (int) q.poll(); if (t == e) return step[t]; for (int i = 0; i < 3; i++) { int xx = d[i][0] * t + d[i][1]; if (xx >= MAX || xx < 0 || vis[xx]) continue; vis[xx] = true; step[xx] = step[t] + 1; q.add(xx); } } return -1; } } /************************************************************** Problem: 2111 User: admin Language: Java Result: Accepted Time:4709 ms Memory:45388 kb ****************************************************************/