아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

라운드 넘버

면접 대비

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

요약
이진 표현에서 0의 개수가 1의 개수 이상인 정수가 [Start, Finish] 구간에 몇 개 있는지 센다.
난이도

보통10점 중 6점

유형
동적 계획법, 비트 연산, 조합론, 수학
정답자
아직 제출이 없습니다

문제

소들은 손가락이 없어서 '가위바위보'로 (누가 먼저 젖을 짜일지 정하는 것처럼) 임의의 결정을 내릴 수 없습니다. 발굽으로는 동전을 던지기도 어렵죠.

그래서 소들은 라운드 넘버(round number) 맞히기를 사용합니다. 첫 번째 소가 20억 미만의 정수를 하나 고르고, 두 번째 소도 똑같이 고릅니다. 두 수가 모두 라운드 넘버이면 첫 번째 소가 이기고, 그렇지 않으면 두 번째 소가 이깁니다.

양의 정수 NN은 그 이진 표현(앞자리 0 없이)에서 0의 개수가 1의 개수보다 많거나 같을 때 라운드 넘버라고 합니다. 예를 들어 99를 이진법으로 쓰면 10011001이고, 0이 두 개, 1이 두 개이므로 99는 라운드 넘버입니다. 2626은 이진법으로 1101011010이며 0이 두 개, 1이 세 개이므로 라운드 넘버가 아닙니다.

소들이 수를 이진법으로 바꾸는 데는 시간이 걸려서 승자를 정하는 데도 오래 걸립니다. Bessie는 주어진 범위 안에 라운드 넘버가 몇 개 있는지 미리 알면 유리할 것이라고 생각합니다.

StartStart부터 FinishFinish까지(양 끝 포함) 범위에 라운드 넘버가 몇 개 있는지 세는 프로그램을 작성하세요. (1≤Start<Finish≤2,000,000,0001 \le Start < Finish \le 2{,}000{,}000{,}000)

입력

  • 첫째 줄: 두 정수 StartStart와 FinishFinish가 공백으로 구분되어 주어집니다.

출력

  • 첫째 줄: StartStart부터 FinishFinish까지(양 끝 포함) 범위에 있는 라운드 넘버의 개수를 정수 하나로 출력합니다.

힌트

다음은 22부터 1212까지 각 수가 라운드 넘버인지 보여줍니다. (열: 십진수, 이진수, 0의 개수 x0 + 1의 개수 x1, 판정)

 2    10  1x0 + 1x1  ROUND
 3    11  0x0 + 2x1  NOT round
 4   100  2x0 + 1x1  ROUND
 5   101  1x0 + 2x1  NOT round
 6   110  1x0 + 2x1  NOT round
 7   111  0x0 + 3x1  NOT round
 8  1000  3x0 + 1x1  ROUND
 9  1001  2x0 + 2x1  ROUND
10  1010  2x0 + 2x1  ROUND
11  1011  1x0 + 3x1  NOT round
12  1100  2x0 + 2x1  ROUND

예제3

  1. 예제 1

    입력
    2 12
    
    예상 출력
    6
    
  2. 예제 2

    입력
    1 2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    7 9
    
    예상 출력
    2