Test.java 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import java.io.InputStreamReader;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.OutputStreamWriter;
  5. import java.io.PrintWriter;
  6. import java.util.Arrays;
  7. import java.util.LinkedList;
  8. import java.util.Queue;
  9. public class Test {
  10. private static final int MAXN = 100000;
  11. private static boolean[] used = new boolean[MAXN + 1];
  12. private static Queue<Integer> queue = new LinkedList<Integer>();
  13. public static void main(String[] args) throws IOException{
  14. BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  15. PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
  16. String s;
  17. int N, K;
  18. while ((s = in.readLine()) != null) {
  19. String[] nk = s.split("\\s+");
  20. N = Integer.parseInt(nk[0]);
  21. K = Integer.parseInt(nk[1]);
  22. out.println(catchCow(N, K));
  23. }
  24. out.flush();
  25. }
  26. private static int catchCow(int N, int K) {
  27. queue.clear();
  28. Arrays.fill(used, false);
  29. queue.offer(N);
  30. used[N] = true;
  31. int size = queue.size(), cnt = 0;
  32. while (size != 0) {
  33. int i = queue.poll();
  34. size--;
  35. if (i == K) break;
  36. if (i - 1 >= 0 && !used[i - 1]) {
  37. queue.offer(i - 1);
  38. used[i - 1] = true;
  39. }
  40. if (i + 1 <= MAXN && !used[i + 1]) {
  41. queue.offer(i + 1);
  42. used[i + 1] = true;
  43. }
  44. if (i * 2 <= MAXN && !used[i * 2]) {
  45. queue.offer(i * 2);
  46. used[i * 2] = true;
  47. }
  48. if (size == 0) {
  49. size = queue.size();
  50. cnt++;
  51. }
  52. }
  53. return cnt;
  54. }
  55. }