Nimble Rendezvous

시간 제한1초메모리 제한1024 MB

요약
수직선 위 두 점이 매번 왼쪽이나 오른쪽으로 이동하되 이동 거리가 두 배씩 늘어날 때, 두 점이 만나는 최소 이동 횟수와 그때의 최종 위치 개수를 구한다.
난이도

보통10점 중 7점

유형
수학, 비트 연산, 조합론, 구현
정답자
아직 제출이 없습니다

문제

수직선 위에 서로 다른 위치에 있는 두 점이 있다. 두 점은 아래 규칙에 따라 이동한다.

  • 단위 시간마다 두 점은 각각 왼쪽 또는 오른쪽 중 한 곳으로 이동한다. 서로 같은 방향으로 이동할 수도 있고, 다른 방향으로 이동할 수도 있음에 유의하자.
  • 두 점의 처음 이동 거리는 11이고, 이동한 뒤 다음 이동 거리는 현재 이동 거리의 두 배가 된다.
  • 이동 중간에 멈추거나 방향을 바꿀 수는 없다.

두 점이 이동을 마친 후, 같은 위치에 있다면 두 점이 만났다고 하자. 두 점의 시작 위치가 주어질 때 두 점이 만나기 위한 최소 이동 횟수와 최소 이동 횟수로 만나는 최종 위치의 개수를 구해보자.

입력

첫째 줄에 두 점의 최초 위치를 나타내는 정수 AA, BB가 공백으로 구분되어 주어진다. (−109≤A,B≤109,A≠B)(-10^9≤A,B≤10^9, A\ne B)

출력

두 점이 만나기 위한 최소 이동 횟수와 최소 이동 횟수로 만나는 최종 위치의 개수를 공백으로 구분하여 출력한다. 만약 두 점이 영원히 만날 수 없다면 대신 -1을 출력한다.

예제3

  1. 예제 1

    입력
    -2 8
    
    예상 출력
    3 3
    
  2. 예제 2

    입력
    123 45
    
    예상 출력
    6 25
    
  3. 예제 3

    입력
    6 49
    
    예상 출력
    -1