upload
This commit is contained in:
commit
810a9654a4
50 changed files with 4450 additions and 0 deletions
76
1/I.py
Normal file
76
1/I.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
def solution(start, stop, debug=False):
|
||||
one = 0
|
||||
zero = 0
|
||||
length = len(bin(start)) - 2
|
||||
|
||||
if len(bin(stop)) - 2 == 1 or len(bin(stop)) - 2 == 2:
|
||||
return 0
|
||||
|
||||
for i in bin(start)[2:]:
|
||||
if i == '1' and zero == 0:
|
||||
one += 1
|
||||
elif i == '0':
|
||||
zero += 1
|
||||
else:
|
||||
break
|
||||
|
||||
# first iteration
|
||||
number = '1' * one + '0' * zero + '1' * (length - one - zero)
|
||||
counter = 0
|
||||
if int(number, 2) == stop:
|
||||
return 1
|
||||
elif int(number, 2) < stop:
|
||||
if len(number) > 3:
|
||||
counter += 1
|
||||
if debug:
|
||||
print(number, int(number, 2))
|
||||
else:
|
||||
return 0
|
||||
|
||||
while int(number, 2) < stop:
|
||||
zero -= 1
|
||||
if zero == 0:
|
||||
one += 1
|
||||
zero = length - one - 1
|
||||
if one >= length - 1:
|
||||
length += 1
|
||||
one = 1
|
||||
zero = length - one - 1
|
||||
number = '1' * one + '0' * zero + '1' * (length - one - zero)
|
||||
if len(number) < 3:
|
||||
continue
|
||||
|
||||
if number.split('0')[0] != number:
|
||||
if debug:
|
||||
print(number, int(number, 2))
|
||||
counter += 1
|
||||
|
||||
if int(number, 2) > stop:
|
||||
counter -= 1
|
||||
|
||||
return counter
|
||||
|
||||
|
||||
def test():
|
||||
input_data: list[tuple[int, int]] = [
|
||||
# (259, 263),
|
||||
# (259, 264),
|
||||
# (16384, 65536),
|
||||
# (16385, 16385),
|
||||
# (16385, 16386),
|
||||
# (259, 16387),
|
||||
(1, 10000000000)
|
||||
# (1, 16)
|
||||
]
|
||||
|
||||
for data in input_data:
|
||||
print(solution(*data, debug=True))
|
||||
|
||||
|
||||
def main():
|
||||
start, stop = map(int, input().split())
|
||||
print(solution(start, stop))
|
||||
|
||||
|
||||
test()
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue