Блог пользователя WitchDoc

Автор WitchDoc, история, 4 года назад, По-английски

Summary of the question:

You are given two numbers L and R 1 <= L <= R <= 10^18. We define a lucky number as a number which contains the pattern “101” in its bit representation. Given an integer K, we need to find the Kth lucky number between L and R (both inclusive) if it exists, otherwise return -1.

My Approach:

So I tried to check every no. between L and R if it had 101 in its bit representation. For some testcases it passed, but for others I got TLE.

Please can someone provide me the most optimal solution/approach to this and these types of questions?

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Do you mean that the bit representation should be like 101010101 or it should contain 101 as a substring in the bit representation

»
4 года назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
101 represents 5
101* : represents numbers in range 10 - 11
101** : represents numbers in range 20 - 23
101*** : represents numbers in range 40 - 47
each * can be 0 or 1.
 and so on. 
Now lets calculate how many numbers less than L are lucky numbers. Its easy to think, without forgetting the case when L contains 101 as first three bits form MSB side, let this number be x. 
Then we calculate the (x + k)th Lucky number again using the pattern above, if this number is <= R, then output it otherwise answer is -1
Edit : I have missed something here, this approach is incorrect