fork download
  1. import bisect
  2. from itertools import combinations
  3.  
  4. class UserMainCode(object):
  5. @staticmethod
  6. def FindSurprisingNumbersSum(input1):
  7. MOD = 1000000007
  8.  
  9. # Function to generate all numbers with exactly 3 set bits using combinations
  10. def generate_surprising_numbers():
  11. surprising_numbers = []
  12. for combo in combinations(range(32), 3): # Generate all combinations of 3 bits
  13. number = (1 << combo[0]) + (1 << combo[1]) + (1 << combo[2])
  14. surprising_numbers.append(number)
  15. surprising_numbers.sort() # Sort the numbers
  16. return surprising_numbers
  17.  
  18. # Generate surprising numbers
  19. surprising_numbers = generate_surprising_numbers()
  20.  
  21. # Precompute the prefix sum of surprising numbers
  22. prefix_sum = [0] * (len(surprising_numbers) + 1)
  23. for i in range(1, len(surprising_numbers) + 1):
  24. prefix_sum[i] = (prefix_sum[i - 1] + surprising_numbers[i - 1]) % MOD
  25.  
  26. # Find the largest surprising number <= input1 using binary search
  27. idx = bisect.bisect_right(surprising_numbers, input1)
  28.  
  29. # The sum of surprising numbers up to the found index
  30. return prefix_sum[idx] % MOD# your code goes here
Success #stdin #stdout 0.05s 9596KB
stdin
Standard input is empty
stdout
Standard output is empty