해밍 거리

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

요약
A 이상 B 이하의 정수 두 개를 골라 이진수로 나타냈을 때 서로 다른 비트 위치가 최대가 되는 쌍을 찾는다.
난이도

보통10점 중 7점

유형
비트 연산, 그리디, 수학
정답자
아직 제출이 없습니다

문제

두 정수의 해밍 거리란, 각각을 이진수로 나타내었을 때 비트가 서로 다른 위치의 개수를 의미한다.

예를 들어, 99와 1212의 해밍 거리를 구해 보자.

9=1001_(2) 12=1100_(2)\begin{aligned} 9 &= 1001\_{(2)} \\\ 12 &= 1100\_{(2)} \end{aligned}

202^0의 자리와 222^2의 자리에서 비트가 서로 다르므로 해밍 거리는 22이다.

두 수의 자릿수가 다르다면 상위 비트에 00을 붙여서 비교한다. 예를 들어, 33과 1111의 해밍 거리를 구해 보자.

3=0011_(2) 11=1011_(2)\begin{aligned} 3 &= 0011\_{(2)} \\\ 11 &= 1011\_{(2)} \end{aligned}

232^3의 자리에서 비트가 서로 다르므로 해밍 거리는 11이다.

AA 이상 BB 이하의 정수 중에서, 해밍 거리가 최대인 두 정수를 구하시오.

입력

정수 AA와 BB가 공백으로 구분되어 주어진다. (1≤A<B≤1018)(1 \le A < B \le 10^{18})

AA, BB가 32비트 정수 범위를 넘을 수 있음에 주의하라.

출력

AA 이상 BB 이하의 정수 중에서, 해밍 거리가 최대인 두 정수를 공백으로 구분하여 출력한다.

그러한 정수 쌍이 여러 개라면 그중 아무거나 하나만 출력한다.

힌트

첫 번째 예제의 출력을 이진수로 나타내면 다음과 같다.

6=0110_(2) 9=1001_(2)\begin{aligned} 6 &= 0110\_{(2)} \\\ 9 &= 1001\_{(2)} \end{aligned}

각 위치의 비트를 비교했을 때 서로 다른 비트의 수는 44개이므로 해밍 거리는 44이며, 이것이 최대이다.

두 번째 예제의 출력을 이진수로 나타내면 다음과 같다.

29=11101_(2) 26=11010_(2)\begin{aligned} 29 &= 11101\_{(2)} \\\ 26 &= 11010\_{(2)} \end{aligned}

각 위치의 비트를 비교했을 때 서로 다른 비트의 수는 33개이므로 해밍 거리는 33이며, 이것이 최대이다.

예제2

  1. 예제 1

    입력
    3 9
    
    예상 출력
    6 9
    
  2. 예제 2

    입력
    25 31
    
    예상 출력
    29 26